Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Sumar filas de un campo relacionando 3 tablas

Estas en el tema de Sumar filas de un campo relacionando 3 tablas en el foro de Mysql en Foros del Web. Hola, eh estado batallando con el siguient eproblema, espero alguien pueda ayudarme tengo 3 tablas: Platillo , alimentos e ingredientes. alimentos contiene las propiedades de ...
  #1 (permalink)  
Antiguo 05/06/2016, 00:42
 
Fecha de Ingreso: junio-2011
Mensajes: 19
Antigüedad: 12 años, 9 meses
Puntos: 0
Sumar filas de un campo relacionando 3 tablas

Hola, eh estado batallando con el siguient eproblema, espero alguien pueda ayudarme

tengo 3 tablas:
Platillo , alimentos e ingredientes.

alimentos contiene las propiedades de varios alimentos, simplifiquemos a solo proteinas y calorias.

platillo contiene el total de las proteinas y calorias que sumen entre los difrentes alimentos que contine dicho platillo.

Ingredientes lo utilizo como metodo para que el usuario agrege mas ingredientes a un platillo, esta tabla contiene el (id_del_alimento) y tambien el (Id_del_platillo) aparte de ot5ro campo llamado cantidad, que lo que hace es asignar cuantas veces debe multiplicar el alimento.
ej: si en la tabla alimentos tnego en el id=3 la fila de platano, con 15 de proteina y 150 de calorias, cantidad se refiere a cuantos platanos debe agregar al platillo.

Esa es la logica que quiero manejar, no se si sea la mas optima , es lo que se me ocurrió.

El problema es que no logro relacionar las tablas, y tampoco puedo sumar las filas que necesito, porque dentro de cada tabla existen registros de diferentes usuarios.

lo que tengo en mente es de cada alimento que agrega el usuario, obtener las propiedades de dicho alimento y multiplicarlas si es el caso, despues insertar estos resultados en la tabla platillo si es el primer ingrediente del platillo e ir haciendo update cada que el usuario agrega mas alimentos.

este es el codigo en PHP de lo que menciono , pero en la tabla platillo no me esta dando las sumas de los ingredientes, se mantiene en 0

Cita:
Editado: Código de programación no permitido en foros de Bases de Datos.
Leer las normas del foro, por favor.
Código MySQL:
Ver original
  1. SELECT id,user,pass FROM users WHERE user='$user' LIMIT 1;

Código MySQL:
Ver original
  1. INSERT INTO ingredientes (id_platillo, id_ingrediente, cantidad, user)
  2.                            VALUES ('$id_platillo','$id_alimento','$cantidad','$user');

Código MySQL:
Ver original
  1. SELECT proteina_total, hidratos_totales, grasas_totales, calorias_totales
  2.                           FROM platillo WHERE id_platillo = '$id_platillo' LIMIT 1 ;

Código MySQL:
Ver original
  1. INSERT INTO platillo (proteina_total, hidratos_totales, grasas_totales, calorias_totales)
  2.                             VALUES ('$multi[1]','$multi[2]','$multi[3]','$multi[4]')
  3.                             WHERE id_platillo = '$id_platillo ;

Código MySQL:
Ver original
  1. UPDATE platillo
  2.                             SET proteina_total = ('$proteina_total' + '$multi[1]') ,hidratos_totales = ('$hidratos_totales' + '$multi[2]'),
  3.                                 grasas_totales = ('$grasas_totales' + '$multi[3]'), calorias_totales = ('$calorias_totales' + '$multi[4]')
  4.                             WHERE id_platillo = '$id_platillo';


Alguien tiene alguna sugerencia?

Última edición por gnzsoloyo; 05/06/2016 a las 07:44
  #2 (permalink)  
Antiguo 05/06/2016, 07:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Sumar filas de un campo relacionando 3 tablas

Por lo pronto, como ya quedó aclarado, no se tratan ni postean códigos de programación en este foro, ni n ninguno de los de Bases de Datos. Solo SQL.

Dicho esto, tienes errores gravisimos de sintaxis en los INSERT, porque el WHERE no es existe en esta cláusula. Solo pertenece a SELECT, UPDATE y DELETE.

Luego, para relacionar tablas, simplemente se usan JOIN, no tienen ningún secreto. Y para realizar un calculo entre un determinado tipo de productos y los platillos, se requiere solamente la tabla de detalle de platillo, y el uso de GROUP BY sobre los platillos, para que pueda devolver la suma total de calorías.

En principio, no parece demasiado complejo, si las tablas están bien definidas... Cosa que no parece.

La verdad es que si lo piensas bien, para que el esquema sea correcto el platillo solo debe contener descripciones propias del menú del restaurante; ingredientes debería contener el detalle de cada platillo, y deberías contar con una tabla de productos, donde listes los productos individuales, y ALLI deberían estar conceptos tales como proteina_total, hidratos_totales, grasas_totales y calorias_totales
En esa forma el calculo de valores totales sería extremadamente simple. Pero tal y como se infiere que tienes el modelo de datos hoy, no sirve.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/06/2016, 15:13
 
Fecha de Ingreso: junio-2011
Mensajes: 19
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Sumar filas de un campo relacionando 3 tablas

Entiendo, disculpa, entre la duda de ponerlo aqui o en el foro PHP, opte en colocarlo aqui ya que la duda era en relacion a las consultas de Mysql, si lo crees necesario lo borro y lo coloco donde deberia ser.

Lo del WHERE no lo sabia, gracias por ese dato.

Lo del JOIN lo voy a intentar, habia ya leido sobre juntar las tablas, pero cuando lo use me juntaba las tablas pero a la vez me salian demaciados registros cuando solo tenia unos cuantos alimentos registrados, creo que es por juntar las tablas mal, lo verificaré-

Ahora bien le problema, necesito explicarlo mejor , porque creo que no estamos viendo el mismo enfoque del problema.
El proyecto no tiene nada que ver con un restaurante, mas bien los usuarios indican las propiedades de cada alimento por si mismos a travez de un formulario, es por eso que se me complica este proceso, obviamente seria muy sencillo si yo estableciera los valores.

Un usuario ingresa un alimento a la tabla alimento, le proporciona propiedades como las cantidades de proteina, hidratos, grasas y calorias, se le asignan otros valores como el ID, el nombre y el usuario que lo registra.

El usuario cera un platillo, a este se le asigna un ID, el tipo de platillo (desayuno, comida o cena) e incorporo los campos de las sumas de las propiedades de los alimentos, Totales de proteinas, grasas , hidratos, y calorias, esto con el fin de que el usuario sepa cuanto contiene de macronutrientes dicho platillo, * esa es la finalidad del proyecto.

Como no quise complicarme en pedirle al usuario los ingredientes del pltaillo en el mismo formulario del platillo, opte por ir sumando o quitando ingredientes al platillo obteinedo tanto el id del alimento como el del platillo.

Explicando de esta forma , aun crees que deberia considerar plantear el problema de otra forma?
  #4 (permalink)  
Antiguo 05/06/2016, 16:19
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Sumar filas de un campo relacionando 3 tablas

Te lo planteo de esta forma :¿Cómo puedes asegurar que los valores indicados por quién ingresa los datos son correctos?
A mi entender sería más fiable basarlos en sus componentes, cuyos valores son verificables, que en una estimación a ojo de buen cubero.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 05/06/2016, 16:37
 
Fecha de Ingreso: junio-2011
Mensajes: 19
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Sumar filas de un campo relacionando 3 tablas

Para que los datos introducidos sean correctos utilizo ajax, restringiendo las posibles respuestas del usuario, de eso no hay problema, mira, creo que voy solucionandolo, solo me falta poder hacer la incercion de los datos en el id_platillo correcto, no logro hacerlo puesto que me has dicho que no se puede usar el WHERE en el INSERT

Puedes aconsejarme sobre una solucion? quisiera ponerte el codigo pero tiene partes de php que creo infrinjen las reglas del foro, pero te puedo poner esto:
Código MySQL:
Ver original
  1. SELECT * FROM platillo WHERE id_platillo='$id_platillo' LIMIT 1;
  2.  
  3. INSERT INTO platillo (proteina_total, hidratos_totales ,grasas_totales , calorias_totales)
  4.                    VALUES ('$NTP','$NTH','$NTG','$NTC')

Las variables que pone ahi son los totales de cada propiedad del alimento, ya eh comprobado sus valores, me inserta en la tabla platillo pero lo que hace es crear un nuevo id para ponerlo ahi, no me lo pone en el id que el usuario introduce desde el formulario

Última edición por gnzsoloyo; 06/06/2016 a las 05:25
  #6 (permalink)  
Antiguo 05/06/2016, 16:55
 
Fecha de Ingreso: junio-2011
Mensajes: 19
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Sumar filas de un campo relacionando 3 tablas

Ok, solucionado, estuve por horas intentando hacerlo con UPDATE, que me rendi e intente con insert , con insert si me lo registraba, con UPDATE no, al final el problema era un corchete... el UPDATE no recibia los valores de las variables porque el corchete estaba cerrado antes ... gracias por la ayuda bro! eh logrado orientarme contandote y organizando mis ideas, saludos!
  #7 (permalink)  
Antiguo 05/06/2016, 17:48
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 4 meses
Puntos: 655
Respuesta: Sumar filas de un campo relacionando 3 tablas

He ahí la diferencia entre una sentencia SQL con valores reales, a una consulta con variables que no se sabe que llevan y más aún que no se tiene el cuidado de saber donde se abren y cierran correctamente paréntesis, corchetes o lo que se use.

Que te quede claro lo que es una consulta SQL REAL y una consulta con variables que es lógica de programación.
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL

Etiquetas: campo, filas, registros, select, sql, tabla, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:57.