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

Concatenar una consulta a base de datos - match against t LIKE

Estas en el tema de Concatenar una consulta a base de datos - match against t LIKE en el foro de Mysql en Foros del Web. Hola a todos! A ver si podeis ayudarme...porque me estoy volviendo loca. Quiero hacer un buscador, que buscará en las columnas 'titulo', 'descripcion' y 'palabras ...
  #1 (permalink)  
Antiguo 12/08/2008, 04:33
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 15 años, 10 meses
Puntos: 2
Concatenar una consulta a base de datos - match against t LIKE

Hola a todos!

A ver si podeis ayudarme...porque me estoy volviendo loca. Quiero hacer un buscador, que buscará en las columnas 'titulo', 'descripcion' y 'palabras clave' de una tabla y en la columna 'categoría' de de otra tabla de la base de datos.
Tengo una serie de checkbox que el usuario pulsará para elegir en qué quiere buscar, si quiere sólo por título, o por categoría y palabras clave...

Hasta ahora no he podido hacerlo, directamente se busca en las 4 columnas, el problema es que no sé como concatenar las búsquedas...

Estoy haciendo las consultas (si se ha intruducido en el buscador una sóla palabra) con LIKE y si se introducen más con MATCH...AGAINST, para poder usar ésta última he creado índices fultext, en una tabla un índice con 'titulo','palabras clave' y 'descripcion' y en la otra tabla otro indice fultext con 'categoria'.

Os enseño el código que tengo para las consultas a ver si me decis como podría concatenarlas, porque como he dicho hasta ahora consulto en todo...

Código:
	if ($numero==1) {
	   $ssql="SELECT * FROM tabla1 WHERE UPPER(titulo) like UPPER('%".$buscar."%') OR UPPER(palabraclave) like UPPER('%".$buscar."%') OR UPPER(descripcion) like UPPER('%".$buscar."%') LIMIT 50";
	   $ssql1="SELECT * FROM tabla2 WHERE UPPER(categorias) like UPPER('%".$buscar."%')LIMIT 50";
	} 
	else{
	   $ssql="SELECT *, MATCH (titulo,descripcion,palabraclave) AGAINST ('$buscar') AS puntuacion FROM tabla1 WHERE MATCH (titulo,descripcion,palabraclave) AGAINST ('$buscar' IN BOOLEAN MODE) ORDER  BY puntuacion DESC";
	   $ssql1="SELECT *, MATCH (categorias) AGAINST ('$buscar') AS puntuacion FROM tabla2 WHERE MATCH (categorias) AGAINST ('$buscar' IN BOOLEAN MODE) ORDER  BY puntuacion DESC";
    
	}
Muchas graciassss
  #2 (permalink)  
Antiguo 12/08/2008, 10:00
Avatar de Genetix  
Fecha de Ingreso: febrero-2002
Ubicación: Lima - Perú
Mensajes: 1.600
Antigüedad: 22 años, 2 meses
Puntos: 45
Respuesta: Concatenar una consulta a base de datos - match against t LIKE

Hola scorm

Creo no deberías usar Like, solo usar MATCH AGAINST indistinto de la cantidad de palabras, ya que con Like tratas de hacer lo mismo que lograrías con MATCH .

Trata de probar tus consultas en modo consola y verificar que funcione, así descartas que sea problema de Mysql o de tus variables de programación .

Saludos!
__________________
"El conocimiento nos hace responsables."
twitter: @benjamingb
blog personal: http://codigolinea.com
ZF Manual en español http://manual.zfdes.com
  #3 (permalink)  
Antiguo 12/08/2008, 13:58
 
Fecha de Ingreso: julio-2008
Mensajes: 85
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Concatenar una consulta a base de datos - match against t LIKE

Like lo uso porque parece que Match ... Against no funciona del todo bien para una sola palabra.
Pero mi problema es que dependiendo de las columnas de la tabla en las que quiera buscar el usuario, la consulta sql será diferente. Por ejemplo si se quiere buscar solo por titutlo y descripcion la consulta sería:

"SELECT *, MATCH (title,description) AGAINST ('$buscar') AS puntuacion FROM tabla WHERE MATCH (title,description) AGAINST ('$buscar' IN BOOLEAN MODE) ORDER BY puntuacion DESC"

Si el usuario quiere buscar solo en el titulo sería:

"SELECT *, MATCH (title) AGAINST ('$buscar') AS puntuacion FROM tabla WHERE MATCH (title) AGAINST ('$buscar' IN BOOLEAN MODE) ORDER BY puntuacion DESC"

Todo esto es aparentemente, porque realmente, como en mi tabla he creado un índice FULTEXT donde englobo los tres campos (titulo descripcion y palabras clave), las consultas que te he puesto me fallan.

¿ALguien sabe cómo debería ponerse el índice fulltext? ¿o si lo que está mal es la consulta?

Otro problema es que hay otro campo por el que querría dar opción a búsqueda, pero que está en otra tabla. ¿Se pueden concatenar consultas para que se muestren los resultados de la busqueda en la tabla uno y en la dos? Ésto lo considero más secundario porque podría crear una tabla que tuviera información de los cuatro campos duplicada, y hacer la búsqueda es ésta tabla. (aunque es un poco cutre).

Alguna idea?
Muchas gracias
  #4 (permalink)  
Antiguo 14/08/2008, 23:05
Avatar de BrujoNic
Super Moderador
 
Fecha de Ingreso: noviembre-2001
Ubicación: Costa Rica/Nicaragua
Mensajes: 16.935
Antigüedad: 22 años, 5 meses
Puntos: 655
Respuesta: Concatenar una consulta a base de datos - match against t LIKE

Favor NOOOOOOOOOOOOOOOO poner código de programación en esta sección.

Función de la sección de Base de Datos
__________________
La tecnología está para ayudarnos. No comprendo el porqué con esa ayuda, la gente escribe TAN MAL.
NO PERDAMOS NUESTRO LINDO IDIOMA ESPAÑOL
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 06:53.