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

Consulta de busqueda para los que sabeis de esto

Estas en el tema de Consulta de busqueda para los que sabeis de esto en el foro de Mysql en Foros del Web. Necesito programar una consulta de busqueda para unos foros. Ya sabeis, que los usuarios puedan buscar por: Palabra de busqueda Foro específico Autor Las tablas ...
  #1 (permalink)  
Antiguo 30/09/2008, 06:06
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 4 meses
Puntos: 1
Consulta de busqueda para los que sabeis de esto

Necesito programar una consulta de busqueda para unos foros. Ya sabeis, que los usuarios puedan buscar por:

Palabra de busqueda
Foro específico
Autor

Las tablas y campos afectadas son estas:

Foros: idForo - NombreForo
Temas: idForo - idTema - TituloTema - MensajeTema - idUsuario
Respuestas: idTema - idRespuesta - MensajeRespuesta - idUsuario
Usuarios : idUsuario - Usuario

¿Ta claro?

Entonces lo que hago es lo siguiente:

1.- La consulta básica de una palabra que obviamente puede estar en cualquiera de estos campos:

TituloTema
MensajeTema
MensajeRespuesta

SELECT Foros.idForo, Foros.NombreForo,
Temas.idTema, Temas.TituloTema,
a.idUsuario, a.Usuario, b.idUsuario, b.Usuario FROM
((((Foros INNER JOIN Temas ON Foros.IdForo = Temas.IdForo)
INNER JOIN Respuestas ON Temas.TemaId = Respuestas.TemaId)
INNER JOIN Usuarios as a ON Usuarios.idUsuario = Temas.IdUsuario)
INNER JOIN Usuarios as b ON Usuarios.idUsuario = Respuestas.idUsuario)
WHERE Temas.TituloTema LIKE "'%palabra_buscada%'" OR Temas.MensajeTema LIKE "'%palabra_buscada%'" OR Respuestas.MensajeRespuesta LIKE "'%palabra_buscada%'"

Aquí ya empiezan los problemas, me da muchos contenidos repetidos y no quisiera utilizar el DISTINCT porque la base de datos es muy grande y esta palabrita sobrecarga mucho al servidor. También he detectado que me da datos incorrectos.

2.- Después necesitaría poder cribar por autor mediante una condicional.
3.- Y por último cribar mediante otra condicional (Si el usuario escogió un foro en concreto) el foro que sea.

Se acepta ayuda, orientación, consejos e incluso ingresos en mi cuenta corriente.

Desde ya muchas gracias a quien dedique un tiempo a tratar de ayudarme.

Saludos
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #2 (permalink)  
Antiguo 30/09/2008, 08:18
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: Consulta de busqueda para los que sabeis de esto

Que tal brother mira en este momento estoy en el trabajo, y no tengo MySQL para crear las tablas y probar, pero mas o menos viendo lo que quieres, creo que este query te podria ayudar.

Código:
select f.idForo,f.NombreForo,t.idTema,t.TituloTema,ut.idUsuario,ut.Usuario
  from Foros f, Temas t, Respuestas r, Usuarios ut
 where t.idForo = f.idForo and r.idTema = t.idTema
   and ut.idUsuario = t.idUsuario
   and (t.TituloTema like '%?%' or t.MensajeTema like '%?%' or r.MensajeRespuesta like '%?%')
   and (t.idUsusuario = ? or r.idUsuario = ?)//Tendrias que controlar que si no te envian nada aqui, no haga esto
   and f.idForo = ?//Tendrias que controlar que si no te envian nada aqui, no haga esto
Esto te lista tu búsqueda pero por temas, cualquier cosa me avisas, espero haberte podido ayudar.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
  #3 (permalink)  
Antiguo 30/09/2008, 10:29
 
Fecha de Ingreso: noviembre-2003
Ubicación: Madrid
Mensajes: 353
Antigüedad: 20 años, 4 meses
Puntos: 1
Respuesta: Consulta de busqueda para los que sabeis de esto

Gracias por la respuesta, lo he probado pero la consulta deja colgado al servidor por completo. Los foros donde quiero poner el buscador tienen cientos de miles de mensajes, están una base de datos Mysql.

¿Hay alguna forma de optimizar la base de datos o esta consulta para que no se sature con la busqueda?
__________________
Lo menos frecuente en este mundo es vivir. La mayoría de la gente existe, eso es todo...
  #4 (permalink)  
Antiguo 30/09/2008, 10:43
Avatar de stone_neo  
Fecha de Ingreso: abril-2004
Ubicación: Peru
Mensajes: 438
Antigüedad: 20 años
Puntos: 15
Respuesta: Consulta de busqueda para los que sabeis de esto

Como te dije no pude probar el query ya que en el proyecto actual que estoy usan SQL Server, y pues no puedo crear tablas y probar, ya que me estan monitoreando, si quieres puedes enviarme tus tablas y los datos a mi correo, y al salir del trabajo te doy el query probado.

Si quieres optimizar tu base de datos una forma seria utilizar indices.
__________________
Rubén Darío Huamaní Ucharima
Web : http://www.gorilla-soft.com
Usuario Linux #382 100 :-)
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:26.