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

Ayuda SELECT.. LIKE

Estas en el tema de Ayuda SELECT.. LIKE en el foro de Mysql en Foros del Web. Tengo 3 tablas: -una con imagenes (id) -otra con 'tags' o 'keywords' (id, tag) -y otra que hace corresponder una o más keywords a cada ...
  #1 (permalink)  
Antiguo 23/09/2009, 18:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 15 años
Puntos: 0
Ayuda SELECT.. LIKE

Tengo 3 tablas:
-una con imagenes (id)
-otra con 'tags' o 'keywords' (id, tag)
-y otra que hace corresponder una o más keywords a cada imagen (id, img_id, tag_id)

Supongamos q la imagen con id = 1, quiero encontrarla a partir de la búsqueda "arboles de hojas rojas".
Entonces voy a tener 3 keywords (el 'de' lo obviamos), o sea 3 filas en la tabla de keywords, y otras 3 filas en la tabla de img-keywords.

Como tendria que ser la consulta, para que me devuelva solo imágenes que contengan esas 3 keywords, y no otras q contengan solo 2 o 1??

Hasta ahora tengo:

SELECT * FROM imagenes AS a
RIGHT JOIN imagenes_tags AS b ON a.id = b.img_id
LEFT JOIN indice_tags AS c ON b.tag_id = c.id
WHERE c.tag LIKE 'arboles%'
GROUP BY b.img_id

si agrego AND c.tag LIKE 'hojas%' ya no devuelve ningun resultado.

Alguna idea?? No quiero tener q hacer 3 consultas y luego compararlas para ver qué imagen salió en las 3.

Por ahi escuche que el fulltext search era mas eficiente que el LIKE, pero me parece que es mas para textos que para unas pocas palabras clave.

Saludos!
  #2 (permalink)  
Antiguo 24/09/2009, 00:49
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Ayuda SELECT.. LIKE

SELECT a.id, COUNT(DISTINCT c.tag) FROM imagenes AS a
inner JOIN imagenes_tags AS b ON a.id = b.img_id
inner JOIN indice_tags AS c ON b.tag_id = c.id
WHERE c.tag IN('árboles','hojas','rojas')
GROUP BY b.img_id HAVING COUNT(distinct c.tag) >= 3

Algo así: no lo he probado
  #3 (permalink)  
Antiguo 24/09/2009, 12:34
 
Fecha de Ingreso: mayo-2009
Mensajes: 210
Antigüedad: 15 años
Puntos: 0
Respuesta: Ayuda SELECT.. LIKE

otra pregunta:

si por ejemplo busco una imagen a partir de 3 tags juntos y mi búsqueda la encuentra 3 veces (una por cada tag), como hago para que el count() me devuelva 1 en vez de 3?? Porque ese count lo uso para decir el numero total de resultados, entonces no quiero que diga "Mostrando resultado 1 de 3", cuando deberia decir "1 de 1". Aviso que no puedo usar un contador fuera de lo q me da mysql, o sea a medida q las voy mostrando, porque si me devuelve 1000 resultados no puedo mostrarlos todos juntos.
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 20:46.