Ver Mensaje Individual
  #5 (permalink)  
Antiguo 03/01/2015, 16:22
eduuh17
 
Fecha de Ingreso: octubre-2014
Mensajes: 70
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: Problema al listar tabla relacionadas

Cita:
Iniciado por gnzsoloyo Ver Mensaje
El WHERE trabaja sobre lo que se denomina "Lógica Proposicional", y tanto el AND como el OR son la aplicación práctica de ello, a partir de las tablas de verdad (ver Tablas de Verdad). ¿Eso lo has visto?
Bueno, el AND es una proposición conjuntiva, lo que implica que para que se cumpla y devuelva datos, las dos partes unidas por un AND deben ser verdad. Siempre.


En tu caso, lo que pusiste es que cada una de las condiciones debía ser TRUE, todas, y como el WHERE se verifica para cada uno de los registros que la relacion de tablas en el FROM devuelve, sólo podrías obtener aquellos registros donde todas las condiciones tienes TRUE.
Si al menos una de las condiciones no se cumple, ese registro no se devuelve.
Por eso recibes una tabla vacía.

En OR es la disyunción lógica (A ó B, ó ambos), y expresa que es verdad si al menos uno de las proposiciones es verdad.


Entonces, devuelve aquellos registros donde al menos una de las condiciones se cumple.

En tu caso, me refiero a "opcionales" a la situación en que el usuario no completa todos los campos en el formulario, y cuando se envía a realizar la búsqueda, alguno de los valores no está (cadena vacía), o bien está mal escrito, pero alguno de los otros si se envió y aparece en el registro.
En esa situación el uso de OR permite que con que solo se cumpla una de las comparaciones, el registro sea devuelto como resultado.

¿Se entiende mejor?

Ahora bien, desde el punto de vista de SQL, lo correcto y para evitar errores de interpretación es, como ya te lo mencioné antes, que las comparaciones contra valores escalares no usen LIKE, sino =, <, >, o BETWEEN. También se debe tener en cuenta que si son números, no deben quedar encerrados entre apostrofos, para evitar conversiones implícitas que afecten la performance.

En definitiva, la sintaxis correcta de tu query, para MySQL sería:
Código MySQL:
Ver original
  1.     V.idvideo,
  2.     V.nombre,
  3.     V.link,
  4.     V.sinopsis,
  5.     V.fecha,
  6.     V.direccion,
  7.     G.idvideo,
  8.     G.idgenero
  9.     video V INNER JOIN gen_video G ON V.idvideo = G.idvideo
  10.     V.nombre LIKE '%$nombre%'
  11.     OR V.link LIKE '%$link%'
  12.     OR V.sinopsis LIKE '%$sinopsis."%'
  13.     OR V.fecha ='$fecha'
  14.     OR V.direccion LIKE '%$direccion%'
  15.     OR V.idgenero = '$generos';
Esto, asumiendo que "idgenero" es un ID numerico, y que "fecha" es un campo DATE o DATETIME. Si es un VARCHAR está mal.
Ah ok gracias por tu respuesta, muchas gracias por tomarte todo el tiempo para darme tantos detalles de verdad se agradece.

Saludos