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

SELECT con WHERE no devuelve resultados cuando si los hay

Estas en el tema de SELECT con WHERE no devuelve resultados cuando si los hay en el foro de Mysql en Foros del Web. Hola a todos! Tengo esta estructura de tablas en mi base de datos Cita: RECETAS(idReceta, TituloReceta, preparacion) INGREDIENTES(idIngrediente, nombreIngrediente) RECETA_INGREDIENTES(idReceta, idIngrediente, cantidad, unidadUsada(campo tipo Enum)) ...
  #1 (permalink)  
Antiguo 06/08/2012, 16:32
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 8 meses
Puntos: 10
SELECT con WHERE no devuelve resultados cuando si los hay

Hola a todos!

Tengo esta estructura de tablas en mi base de datos

Cita:
RECETAS(idReceta, TituloReceta, preparacion)
INGREDIENTES(idIngrediente, nombreIngrediente)
RECETA_INGREDIENTES(idReceta, idIngrediente, cantidad, unidadUsada(campo tipo Enum))
y al hacer esta consulta:

Código PHP:
SELECT FROM `receta_ingredientesINNER JOIN `recetasON `receta_ingredientes`.idReceta=`recetas`.idReceta WHERE (`receta_ingredientes`.idIngrediente=4) AND (`receta_ingredientes`.idIngrediente=5
Me sale siempre un resultado nulo, cuando tengo dos recetas que tienen esos 2 idIngredientes como podeis ver en la siguiente imagen las recetas con idReceta 2 y con idReceta 7 tienen esos dos idIngredientes:



Sin embargo si lo pruebo con OR en vez de con AND me salen las dos (entiendo porque me salen con OR lo que no entiendo es porque con AND me devuelve conjunto vacio)

Alguien sabe la razon?

Gracias
__________________
Tecnología y tutoriales
  #2 (permalink)  
Antiguo 06/08/2012, 17:03
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, 5 meses
Puntos: 2658
Respuesta: SELECT con WHERE no devuelve resultados cuando si los hay

Cita:
Alguien sabe la razon?
En realidad... si. Es que los dos parámetros del WHERE son incompatibles entre sí.
Lo que tienes es esto (los alias de las tablas los puse para hacer que el código sea más entendible):
Código MySQL:
Ver original
  1.     `receta_ingredientes`  RI
  2.     INNER JOIN `recetas` R ON RI.idReceta = R.idReceta
  3.     RI.idIngrediente = 4
  4.     AND
  5.     RI.idIngrediente = 5;
Si te fijas, estás pidiendo que te devuelva todos los registros de recetas e ingredientes tales que el idIngrediente sea al mismo tiempo 4 y 5...
Eso es simplemente imposible, ¿no te parece?
O ese registro tiene un 4 en ese campo, o tiene el 5, pero no puede tener los dos valores al mismo tiempo.
__________________
¿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 06/08/2012, 23:31
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: SELECT con WHERE no devuelve resultados cuando si los hay

Hola de nuevo gnzsoloyo ;)

Pues entiendo, pero entonces como puedo sacar una receta que tenga esos dos (o mas) ingredientes ingredientes?

Gracias
__________________
Tecnología y tutoriales
  #4 (permalink)  
Antiguo 07/08/2012, 04:30
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, 5 meses
Puntos: 2658
Respuesta: SELECT con WHERE no devuelve resultados cuando si los hay

"Dos o más"....
Allí es mejor que definas mejor lo que quieres, porque SQL no responde con cosas abstractas.
Si lo que quieres es que te devuelva aquellas recetas que contienen si o si ambos, andaría por acá:
Código MySQL:
Ver original
  1.     `receta_ingredientes`  RI
  2.     INNER JOIN `recetas` R ON RI.idReceta = R.idReceta
  3.     RI.idReceta IN(SELECT idReceta
  4.                           FROM receta_ingredientes
  5.                           WHERE idIngrediente IN (4, 5)
  6.                           GROUP BY dReceta
  7.                           HAVING COUNT(*) = 2);
Aunque esta es sólo una de las formas de escribirla.
__________________
¿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 07/08/2012, 11:12
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: SELECT con WHERE no devuelve resultados cuando si los hay

Muchas gracias por tu ayuda gnzsoloyo!!

He conseguido hacerlo, pero lo he hecho solo con esto:

Código PHP:
    SELECT *
    
FROM
        
`receta_ingredientes`  RI
        INNER JOIN 
`recetasR ON RI.idReceta R.idReceta
    WHERE
        RI
.idIngrediente IN (4,5
Asi de esta forma me sale el titulo repetido por cada ingrediente que tenga la receta pero con php, ya me encargo de mostrar solo uno.

Aun asi me gustaria que me explicaras la sintaxis restante a partir de IN que has puedto, porque la informacion que he encontrado es un poco confusa, y soy bastante novato con mysql.

Código PHP:
IN(SELECT idReceta
                          FROM receta_ingredientes
                          WHERE idIngrediente IN 
(45)
                          
GROUP BY dReceta
                          HAVING COUNT
(*) = 2); 
lo que no entiendo exactamente es:
- Porque pones un SELECT idREceta de nuevo?
- Y el group para que sirve exactamente?

De todas formas he copiado el codigo y me daba un error:

Cita:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/recetas/resultadoBusqueda.php on line 26
Sin embargo error no me da con el codigo que he puesto al principio del mensaje...
¿Porque?

Muchas gracias!
__________________
Tecnología y tutoriales
  #6 (permalink)  
Antiguo 07/08/2012, 12:17
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, 5 meses
Puntos: 2658
Respuesta: SELECT con WHERE no devuelve resultados cuando si los hay

Cita:
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /Applications/XAMPP/xamppfiles/htdocs/recetas/resultadoBusqueda.php on line 26
Esto es un error de PHP, no de MySQL. Ese error puede ser generado por un error de programación debido a que no estés validando que la consulta haya devuelto un resultado (es el error más común de los programadores cuando envían a consultar a la base).
Respecto a la consulta que te propongo, la idea es que te devuelva (tal como preguntabas) sólo aquellas recetas donde tienes ambos ingredientes, y no te devuelva ninguna otra.
Lo que tu haces con el IN(4, 5) es lo mismo que hacías con el OR. Ambas son sintácticamente equivalentes.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 07/08/2012, 14:46
Avatar de dryant  
Fecha de Ingreso: agosto-2009
Ubicación: Malaga, Ceuta, España....
Mensajes: 283
Antigüedad: 14 años, 8 meses
Puntos: 10
Respuesta: SELECT con WHERE no devuelve resultados cuando si los hay

Ok!
Ya se donde estaba el error en el codigo que me mandaste:


GROUP BY dReceta


habia que poner una i


GROUP BY idReceta



De esta forma ha funcionado a la perfeccion!!!!

Muchisimas gracias!!!

__________________
Tecnología y tutoriales

Etiquetas: devuelve, join, resultados, select, tabla, tipo, campos
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 18:49.