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

Buscador sobre tablas diferentes

Estas en el tema de Buscador sobre tablas diferentes en el foro de Mysql en Foros del Web. Necesito realizar una busqueda, mediante una palabra llamada $text . La busqueda la debo realizar sobre dos tablas diferentes, las cuales no tienen relacion entre ...
  #1 (permalink)  
Antiguo 21/08/2008, 00:28
Avatar de granbosteron  
Fecha de Ingreso: agosto-2004
Mensajes: 164
Antigüedad: 19 años, 8 meses
Puntos: 1
Buscador sobre tablas diferentes

Necesito realizar una busqueda, mediante una palabra llamada $text.
La busqueda la debo realizar sobre dos tablas diferentes, las cuales no tienen relacion entre ellas, es posible hacer esto? que funciones de mysql debo utilizar?

Las estructuras de las tablas son en resumen algo como esto:

TABLE NEWS_DESCRIPTION
Código PHP:
news_id
news_title
news_description 
TABLE NEWS_EVENT
Código PHP:
event_id
news_title
news_description 
Podria hacer primeramente una busqueda sobre la primer tabla y luego otra busqueda sobre la segunda. Pero de esta manera los resulatos de la primer tabla quedarian todos juntos en primera instancia, y todos los resultados de la busqueda sobre la segunda tabla, quedarian juntos en segundo lugar.

En cambio lo que necesito hacer es una busqueda intercalada de resultados, identificando el tipo de resulato obtenido. Ejemplo si el primer resultado tiene a "news_id" como ">0" entonces ese resultado es una noticia, de lo contrario si "event_id" es ">0" se que el resultado es sobre un evento.

Los campos en donde buscaria con la palabra "$text" serian:
news_title
news_description
event_title
event_description


y las busqueda deberia funcionar como lo hacemos en cualquier consulta mediante "LIKE".

Espero haberme hecho entender.
Muchas gracias y espero sus recomendaciones.
__________________
Saludos :adios: :adios: :adios:
  #2 (permalink)  
Antiguo 21/08/2008, 01:30
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Buscador sobre tablas diferentes

Me he liado un poco con los nombres de las tablas y campos, pero te diré que eso se hace con UNION ALL. La consulta sería esta:

Cita:
(SELECT 'n', id, news_description, news_title, news_fecha from news_description)
UNION ALL
(SELECT 'e', id, events_description, events_title, events_fecha from events_description)
WHERE news_description LIKE 'cadenatextobuscada' OR news_title LIKE 'cadenatextobuscada' ORDER BY news_fecha
Te he puesto 'n' y 'e' para que puedas identificar la procedencia de news_description o events_description. Comprueba los nombres de los campos. Observa que en la consulta con where se usan los nombres de la primera tabla, que son los que sirven de referencia. Los paréntesis son necesarios.

Última edición por jurena; 21/08/2008 a las 02:32
  #3 (permalink)  
Antiguo 21/08/2008, 12:55
Avatar de granbosteron  
Fecha de Ingreso: agosto-2004
Mensajes: 164
Antigüedad: 19 años, 8 meses
Puntos: 1
Respuesta: Buscador sobre tablas diferentes

Cita:
Iniciado por jurena Ver Mensaje
Me he liado un poco con los nombres de las tablas y campos, pero te diré que eso se hace con UNION ALL. La consulta sería esta:



Te he puesto 'n' y 'e' para que puedas identificar la procedencia de news_description o events_description. Comprueba los nombres de los campos. Observa que en la consulta con where se usan los nombres de la primera tabla, que son los que sirven de referencia. Los paréntesis son necesarios.
Gracias Jurena por la gran ayuda!!! Sirvio de maravillas. Pero envio el SELECT como quedo en forma mas limpia.


Código PHP:
(SELECT 
'n'n.news_idn.date_added AS fechand.news_title  
FROM news n
news_description nd 
WHERE nd
.news_title LIKE '%%palabra%%'
AND nd.news_id=n.news_id 
AND n.status_id='1' 
)

UNION ALL

(SELECT 
'e'e.event_ide.date_start AS fechaed.event_title  
FROM event e
event_description ed 
WHERE ed
.event_title LIKE '%%palabra%%'
AND ed.event_id=e.event_id 
AND e.status_id='1' 

ORDER BY fecha desc 
Gracias de nuevo! y espero que le sirva a alguien en el futuro.
Saludos!
__________________
Saludos :adios: :adios: :adios:
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 11:29.