Calculo desde tabla con parámetros

Tengo una Access con 3 tablas:
TABLA INGREDIENTES: que contiene los valores nutricionales de muchos ingredientes (aceite, sal, arroz...)
TABLA PLATOS: que contiene que ingredientes y en que cantidad contiene cada plato (ej: Plato: Arroz con tomate --> 150gr arroz, 100ml tomate... Etc)
TABLA CALCULO: en la que debería aparecer el valor nutricional del plato según las cantidades de ingredientes que contiene.
He creado un formulario para entrar los datos de los platos, pero como puedo hacer para que cada vez que cree un plato, ¿se calculen sus valores nutricionales en base a los valores de sus ingredientes?
Respuesta
1
Lo que necesitas hacer no es tener una tabla con los cálculos, sino una consulta que los presente cada vez que tu quieras.
Supongamos que tu tabla de ingredientes tiene los siguientes campos:
- NombreDelIngrediente (arroz, sal, aceite, etc...)
- TipoValorNutricional (grasas, proteínas, etc...)
- ValorNutricional100gr (el valor para 100 gramos)
Y que la tabla de platos tiene:
- nombrePlato (fabada, paella, etc...)
- NombreDelIngrediente (arroz, sal, aceite, etc...)
- PesoEnGramos
Con esas dos tablas, crearía una consulta de referencias cruzadas que sería la siguiente:
TRANSFORM Sum([valorNutricional100gr]*[pesoEnGramos]/100) AS valorNutricional
SELECT platos.nombrePlato
FROM platos INNER JOIN ingredientes ON platos.nombreDelIngrediente = ingredientes.nombreDelIngrediente
GROUP BY platos.nombrePlato
PIVOT ingredientes.tipoValorNutricional;
También podrías consultar los datos de un plato con esta otra consulta:
SELECT platos.nombrePlato, ingredientes.tipoValorNutricional, [valorNutricional100gr]*[pesoEnGramos]/100 AS valorNutricional
FROM platos INNER JOIN ingredientes ON platos.nombreDelIngrediente = ingredientes.nombreDelIngrediente
WHERE (((platos.nombrePlato)=[Nombre del Plato]));
En primer lugar muchas gracias por la respuesta. Creo que se aproxima bastante a lo que intento hacer.
Sin embargo, no puedo aplicarlo porque la distribución de tablas que has propuesto tu no se ajusta a las mías. Me explico con un ejemplo:
Mi tabla INGREDIENTES está compuesta por los campos:
Id
Nombre
Y ahora todos los valores nutricionales que necesito:
AGUA
KCAL
Lípidos
ETC
La tabla de PLATOS se parece bastante a la que has propuesto, pero con la diferencia de que tu has planteado 1 solo ingrediente, cuando yo necesito al menos 10 posibles ingredientes con sus respectivas cantidades. Los campos que he creado han sido:
INGR1
CANT1
INGR2
CANT2
Y así sucesivamente hasta 10.
No se si la consulta que tu me propones se ajusta a esta condiciones.
Si necesitas alguna aclaración más o cualquier cosa, incluida la propia BD, puedes contactarme en [email protected]
Muchísimas gracias!
En primer lugar te comentaré que en bases de datos no se debe diseñar las tablas de esa manera por múltiples motivos, el principal: hay cosas que luego no se pueden llegar a hacer.
Basándonos en tus tablas, la consulta que quieres hacer tendrías que realizarla en 2 pasos.
1) Crear una tabla que llamaremos 'consultaValoresSub' y su código SQL sería:
select PLATOS.idPlato,PLATOS.nombrePlato,INGREDIENTES.id,INGREDIENTES.agua,INGREDIENTES.kcal,INGREDIENTES.lipidos...... from PLATOS inner join INGREDIENTES on PLATOS.INGR1=INGREDIENTES.id
UNION ALL
select PLATOS.idPlato,PLATOS.nombrePlato,INGREDIENTES.id,INGREDIENTES.agua,INGREDIENTES.kcal,INGREDIENTES.lipidos...... from PLATOS inner join INGREDIENTES on PLATOS.INGR2=INGREDIENTES.id
UNION ALL
select PLATOS.idPlato,PLATOS.nombrePlato,INGREDIENTES.id,INGREDIENTES.agua,INGREDIENTES.kcal,INGREDIENTES.lipidos...... from PLATOS inner join INGREDIENTES on PLATOS.INGR3=INGREDIENTES.id
UNION ALL
select PLATOS.idPlato,PLATOS.nombrePlato,INGREDIENTES.id,INGREDIENTES.agua,INGREDIENTES.kcal,INGREDIENTES.lipidos...... from PLATOS inner join INGREDIENTES on PLATOS.INGR4=INGREDIENTES.id
...
Fíjate que tienes que poner una instrucción SELECT por cada ingrediente que pueda tener el plato como máximo. Si tienes definidos 10 ingredientes, 10 select. Si son 20... dudo que access pueda con tantas select unidas.
Una vez hecha esa consulta, lo único que te quedaría es una segunda consulta basada en la anterior que sume los ingredientes por cada plato.
Esta consulta tendría el siguiente código SQL
select idPlato,nombrePlato,sum(agua) as 'Total Agua',sum(kcal) as 'Total Kcal',..... from consultaValoresSub;
Espero que así te funcione. Si no tendremos que plantear una de las siguientes opciones: o corregir el problema de diseño de las tablas o bien realizar un pequeño programa en Visual Basic (no temas que no es muy difícil) para que realice la consulta que tu quieres.
Funciona a las mil maravillas!
Muchísimas gracias por el tiempo que me has dedicado.
De todas formas, y aunque me doy por totalmente satisfecho con la respuesta, estoy abierto a que me propongas un mejor diseño de la BD.
Muchas gracias de nuevo!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas