Ver Mensaje Individual
  #17 (permalink)  
Antiguo 05/03/2013, 18:13
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Consulta multiple para buscador

Cita:
Iniciado por T4ke0veR Ver Mensaje
pero la sentencia la estoy ejecutando en php... se supone q esas funciones vienen de php..
Que estés ejecutando la consulta desde PHP, no hace que la consulta sea PHP.... Sigue siendo SQL... embebido en PHP. Pero es SQL.

Eso me parece bastante obvio.

Ahora, yendo a la consulta en sí, si la ordenamos (¿por qué será que nunca la escriben estructuradamente, como para poder leerla mejor?), quedaría mas o menos:

Código MySQL:
Ver original
  1.     hoteles.descripcion,
  2.     hoteles.titulo,
  3.     rest.descripcion,
  4.     rest.titulo,
  5.     pecuaria.descripcion,
  6.     pecuaria.titulo,
  7.     nautica.descripcion,
  8.     nautica.titulo,
  9.     embarcaderos.descripcion,
  10.     embarcaderos.titulo,
  11.     eventos.descripcion,
  12.     eventos.titulo, emergencias.descripcion,
  13.     emergencias.titulo,
  14.     clasificados.descripcion,
  15.     clasificados.titulo
  16.     hoteles,
  17.     rest,
  18.     pecuaria,
  19.     nautica,
  20.     embarcaderos,
  21.     eventos,
  22.     emergencias,
  23.     clasificados
  24.     hoteles.descripcion LIKE '%tucacas%'
  25.     OR
  26.     hoteles.titulo LIKE '%tucacas%'
  27.     OR
  28.     rest.descripcion LIKE '%tucacas%'
  29.     OR
  30.     rest.titulo LIKE '%tucacas%'
  31.     OR
  32.     pecuaria.descripcion LIKE '%tucacas%'
  33.     OR
  34.     pecuaria.titulo LIKE '%tucacas%'
  35.     OR
  36.     nautica.descripcion LIKE '%tucacas%'
  37.     OR
  38.     nautica.titulo LIKE '%tucacas%'
  39.     OR
  40.     embarcaderos.descripcion LIKE '%tucacas%'
  41.     OR
  42.     embarcaderos.titulo LIKE '%tucacas%'
  43.     OR
  44.     eventos.descripcion LIKE '%tucacas%'
  45.     OR
  46.     eventos.titulo LIKE '%tucacas%'
  47.     OR
  48.     emergencias.descripcion LIKE '%tucacas%'
  49.     OR
  50.     emergencias.titulo LIKE '%tucacas%'
  51.     OR
  52.     clasificados.descripcion LIKE '%tucacas%'
  53.     OR
  54.     clasificados.titulo LIKE '%tucacas%'
Por lo pronto, como consulta es un espanto: No sólo no has puesto ni una condición que relacione las tablas, con lo que puede estar cruzando cualquier cosa con cualquier otra, sino que semejante colección de ORs y LIKEs (¿por qué siempre abusan tanto de una clausula tan espantosa?), puede devolver cualquier cosa... previo leer todos los registros de todas las tablas sin excepciones.
Hay al menos un par de errores básicos: Como no estás indicando las relaciones entre las tablas (si es que existen), MySQL asume que los campos del mismo nombre entre las diferentes tablas son los que las relacionan e intenta hacer un JOIN implícito entre todas usando ese criterio.
Pero si hubiese en todas campos "descripcion", o "nombre", por ejemplo, el resultado sería... nulo. Y sería nulo porque muy probablemente no haya clasificados que compartan con emergencias su contenido en campos de ese nombre.
Además, al operar como un INNER JOIN, la coincidencia debe ser total, entre todas las tablas al mismo tiempo, cosa bastante poco probable.
Lo del OR, lo dejaremos para después, pero desde ya lo que estás haciendo es incorrecto e ineficiente como mínimo. Te lo aseguro.

Deberías profundizar en el SQL y las BBDD, antes de seguir adelante.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)