MySQL - Problema con consulta varias tablas

 
Vista:

Problema con consulta varias tablas

Publicado por aratar79 (4 intervenciones) el 26/09/2012 03:43:37
Hola chicos, lo primero gracias a todos, soy nuevo en este foro y tenia una duda a ver si ustedes me puedes ayudar, veran tengo una base de datos con tres tablas, una ingredientes, otra recetas y otra que relaciona ingredientes con recetas y ademas cantidades de ingredientes, entoces cuando quiero averiguar que ingredientes tiene una recetas esta todo bien hago esta consulta:
1
2
3
4
5
6
7
8
9
10
Select NombreReceta, descripcion from ingredientes,recetas  where ID_ingrediente in (select idIngrediente from RelacionRecetasIngredientes where idReceta = 1);
 
+-----------------+-----------------------------------+
| NombreReceta    | descripcion                       |
+-----------------+-----------------------------------+
| RECETA PRUEBA 1 | BERENJENA LARGA EXTRA             |
| RECETA PRUEBA 1 | ATUN ACEITE VEGETAL 1K PESCAMAR   |
| RECETA PRUEBA 1 | TOMATE CHERRY JARDIN ROJO BANDEJA |
| RECETA PRUEBA 1 | CARNE PICADA TERNERA 100 %        |
+-----------------+-----------------------------------+

pero si quiero averiguar ademas cual es la cantidad de cada ingrediente soy incapaz:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Select NombreReceta, descripcion, cantidad from ingredientes,recetas,RelacionRecetasIngredientes  where ID_ingrediente in (select idIngrediente from RelacionRecetasIngredientes where idReceta = 1);
 
+-----------------+-----------------------------------+----------+
| NombreReceta    | descripcion                       | cantidad |
+-----------------+-----------------------------------+----------+
| RECETA PRUEBA 1 | BERENJENA LARGA EXTRA             |   150.00 |
| RECETA PRUEBA 1 | BERENJENA LARGA EXTRA             |   300.00 |
| RECETA PRUEBA 1 | BERENJENA LARGA EXTRA             |   100.00 |
| RECETA PRUEBA 1 | BERENJENA LARGA EXTRA             |    50.00 |
| RECETA PRUEBA 1 | ATUN ACEITE VEGETAL 1K PESCAMAR   |   150.00 |
| RECETA PRUEBA 1 | ATUN ACEITE VEGETAL 1K PESCAMAR   |   300.00 |
| RECETA PRUEBA 1 | ATUN ACEITE VEGETAL 1K PESCAMAR   |   100.00 |
| RECETA PRUEBA 1 | ATUN ACEITE VEGETAL 1K PESCAMAR   |    50.00 |
| RECETA PRUEBA 1 | TOMATE CHERRY JARDIN ROJO BANDEJA |   150.00 |
| RECETA PRUEBA 1 | TOMATE CHERRY JARDIN ROJO BANDEJA |   300.00 |
| RECETA PRUEBA 1 | TOMATE CHERRY JARDIN ROJO BANDEJA |   100.00 |
| RECETA PRUEBA 1 | TOMATE CHERRY JARDIN ROJO BANDEJA |    50.00 |
| RECETA PRUEBA 1 | CARNE PICADA TERNERA 100 %        |   150.00 |
| RECETA PRUEBA 1 | CARNE PICADA TERNERA 100 %        |   300.00 |
| RECETA PRUEBA 1 | CARNE PICADA TERNERA 100 %        |   100.00 |
| RECETA PRUEBA 1 | CARNE PICADA TERNERA 100 %        |    50.00 |
+-----------------+-----------------------------------+----------+


me devuelve todas las cantidades y no se como hacer para que cada ingredientes me devuelva su cantidad.

Gracias a todos de antemano, un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de xve
Val: 796
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Problema con consulta varias tablas

Publicado por xve (1151 intervenciones) el 26/09/2012 07:34:59
No te aconsejo la utilización de la clausula IN, ya que si hubiera muchos registros, las consultas tardan mucho, ya que para MySQL acaban siendo un montón de OR

Sobre lo que me comentas de la segunda consulta, creo que seria un left join, pero no se porque campos los tienes vinculados... nos puedes mostrar la estructura?? y intento mostrarte como yo lo haría?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con consulta varias tablas

Publicado por aratar79 (4 intervenciones) el 26/09/2012 08:23:06
Si ahora mismo... Gracias.
Tabla ingredientes:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
+----------------+------------------+------+-----+---------+----------------+
| Field          | Type             | Null | Key | Default | Extra          |
+----------------+------------------+------+-----+---------+----------------+
| ref            | varchar(25)      | YES  |     | NULL    |                |
| iva            | int(11)          | YES  |     | NULL    |                |
| descripcion    | varchar(40)      | YES  |     | NULL    |                |
| ProvActiv      | int(11)          | YES  |     | NULL    |                |
| ProvPos1       | int(11)          | YES  |     | NULL    |                |
| ProvPos2       | int(11)          | YES  |     | NULL    |                |
| ProvPos3       | int(11)          | YES  |     | NULL    |                |
| unidades       | int(11)          | YES  |     | NULL    |                |
| Prec_Actual    | decimal(10,2)    | YES  |     | NULL    |                |
| Prec_Pos1      | decimal(10,2)    | YES  |     | NULL    |                |
| Prec_Pos2      | decimal(10,2)    | YES  |     | NULL    |                |
| Prec_pos3      | decimal(10,2)    | YES  |     | NULL    |                |
| merma          | int(11)          | YES  |     | NULL    |                |
| ID_ingrediente | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| PrecioMermaIva | decimal(10,2)    | YES  |     | NULL    |                |
+----------------+------------------+------+-----+---------+----------------+

Tabla recetas:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
mysql> describe recetas;
+--------------+------------------+------+-----+---------+----------------+
| Field        | Type             | Null | Key | Default | Extra          |
+--------------+------------------+------+-----+---------+----------------+
| NombreReceta | text             | YES  |     | NULL    |                |
| Elaboracion  | int(11)          | YES  |     | NULL    |                |
| Conservacion | int(11)          | YES  |     | NULL    |                |
| Temp         | int(11)          | YES  |     | NULL    |                |
| Plato        | int(11)          | YES  |     | NULL    |                |
| Dificultad   | int(11)          | YES  |     | NULL    |                |
| Maquinaria   | int(11)          | YES  |     | NULL    |                |
| ingrediente  | int(11)          | YES  |     | NULL    |                |
| info         | text             | YES  |     | NULL    |                |
| notas        | text             | YES  |     | NULL    |                |
| instruciones | text             | YES  |     | NULL    |                |
| raciones     | int(11)          | YES  |     | NULL    |                |
| pvp          | decimal(10,2)    | YES  |     | NULL    |                |
| pvc          | decimal(10,2)    | YES  |     | NULL    |                |
| pvcIva       | decimal(10,2)    | YES  |     | NULL    |                |
| porcentaje   | float            | YES  |     | NULL    |                |
| ID_Receta    | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
+--------------+------------------+------+-----+---------+----------------+

Y la Tabla RelacionRecetasIngredientes:
1
2
3
4
5
6
7
8
describe RelacionRecetasIngredientes;
+---------------+---------------+------+-----+---------+-------+
| Field         | Type          | Null | Key | Default | Extra |
+---------------+---------------+------+-----+---------+-------+
| idReceta      | int(11)       | YES  |     | NULL    |       |
| idIngrediente | int(11)       | YES  |     | NULL    |       |
| cantidad      | decimal(10,2) | YES  |     | NULL    |       |
+---------------+---------------+------+-----+---------+-------+
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con consulta varias tablas

Publicado por Ignacio Esviza (6 intervenciones) el 26/09/2012 19:36:28
1
2
3
4
5
6
7
8
9
10
SELECT
    rec.NombreReceta AS receta,
    ing.descripcion AS ingrediente,
    rel.cantidad
FROM
    recetas rec
    LEFT JOIN RelacionRecetasIngredientes rel ON rel.idReceta = rec.ID_receta
    LEFT JOIN ingredientes ing ON rel.idIngrediente = ing.ID_ingrediente
ORDER BY
    rec.NombreReceta


Saludos
Ignacio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con consulta varias tablas

Publicado por Ignacio Esviza (6 intervenciones) el 26/09/2012 19:55:26
Eso es para todas las recetas. Si precisás obtener el contenido de alguna receta en particular... es así:

1
2
3
4
5
6
7
8
9
10
SELECT
    rec.NombreReceta AS receta,
    ing.descripcion AS ingrediente,
    rel.cantidad
FROM
    recetas rec
    LEFT JOIN RelacionRecetasIngredientes rel ON rel.idReceta = rec.ID_receta
    LEFT JOIN ingredientes ing ON rel.idIngrediente = ing.ID_ingrediente
WHERE
    rec.ID_receta = '1234'


Donde '1234' es el ID de la receta buscada.

Saludos.
Ignacio
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con consulta varias tablas

Publicado por aratar79 (4 intervenciones) el 27/09/2012 08:15:57
Gracias chicos eso era justo lo que necesito, ahora a ver si soy capaz de comprenderlo un saludo fuerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con consulta varias tablas

Publicado por Leonardo (2 intervenciones) el 26/09/2012 19:23:34
Hola, me parece que lo que te está faltando es agrupar, es decir, si no interpreté mal, vos lo que estarías necesitando es que te devuelva la cantidad total de cada ingrediente. Para lograr esto, podrías probar hacer lo siguiente:


Select NombreReceta,
descripcion,
SUM(cantidad ) AS Cant_Total
from ingredientes, recetas, RelacionRecetasIngredientes
where ID_ingrediente in
(select idIngrediente from RelacionRecetasIngredientes where idReceta = 1)
order by NombreReceta, Descripcion;

En teoría con esta consulta tendrías que conseguir lo que estás necesitándo.

Espero que te haya sido de utilidad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema con consulta varias tablas

Publicado por Leonardo (2 intervenciones) el 26/09/2012 19:28:43
Perdon, me equivoque el group por el order, la consulta te quedaría algo así:

Select NombreReceta,
descripcion,
SUM(cantidad ) AS Cant_Total
from ingredientes, recetas, RelacionRecetasIngredientes
where ID_ingrediente in
(select idIngrediente from RelacionRecetasIngredientes where idReceta = 1)
group by NombreReceta, Descripcion;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Problema con consulta varias tablas

Publicado por aratar79 (4 intervenciones) el 27/09/2012 08:17:29
Hay! perdon que puse el comentario de agradecimiento mas arriba, nada lo dicho
Gracias chicos eso era justo lo que necesito, ahora a ver si soy capaz de comprenderlo un saludo fuerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar