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

Consulta que cumpla varios criterios inner de etiquetado

Estas en el tema de Consulta que cumpla varios criterios inner de etiquetado en el foro de Mysql en Foros del Web. Hola, estoy "atascado" y no soy capaz de avanzar. Tengo un base de datos de imagenes, por ejemplo, por simplificar os digo como estan: TABLA_IMAGEN ...
  #1 (permalink)  
Antiguo 13/06/2012, 03:28
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 15 años, 11 meses
Puntos: 3
Consulta que cumpla varios criterios inner de etiquetado

Hola, estoy "atascado" y no soy capaz de avanzar.

Tengo un base de datos de imagenes, por ejemplo, por simplificar os digo como estan:

TABLA_IMAGEN
IDIMAGEN --------- ARCHIVO ------------- FECHA
1 ------------- manolo.jpg ------------- 1/2/2000
2 ------------- coches.jpg -------------1/2/2000
3 ------------- barco.jpg ------------- 1/2/2000
4 ------------- raton.jpg -------------1/4/2010
......


y despues tengo una tabla con etiquetas
TABLA_ETIQUETAS
IDETIQUETA------IDIMAGEN
A ------------- 1
B ------------- 1
C ------------- 1
A ------------- 2
B ------------- 2
D ------------- 2
B ------------- 3
A ------------- 4
C ------------- 4

La cosa es que quiero hacer busquedas de imagenes que cumplan 2 etiquetas o mas, pero deben ser simultaneamente.

Si quiero que buscar que imagenes tienen la etiqueta A y C y que ademas sea del 1/2/2000 deberia salir que la imagen 1 es la unica que CUMPLE.

Si hago
SELECT * FROM TABLA_IMAGEN
LEFT JOIN TABLA_IMAGEN.IDIMAGEN=TABLA_ETIQUETAS.IDIMAGEN
WHERE FECHA='1/2/2000' AND (IDETIQUETA = 'A' OR IDETIQUETA = 'C')

El problema es que si pongo OR, me muestra resultados que cumplen A o C, y si en lugar de OR pongo AND, muestra 0 resultados...

Alguna IDEA??? Se que debe ser una chorrada, pero ahora mismo me tiene pillado... debe ser el cansancio que no me deja ver...

GRACIAS!
  #2 (permalink)  
Antiguo 13/06/2012, 05:23
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta que cumpla varios criterios inner de etiquetado

Código mysql:
Ver original
  1. from tabla_imagen i
  2.       left join
  3.             tabla_etiquetas e
  4.                      on i.idimagen=e.idimagen
  5.              where i.idimagen in (select i2.idimagen
  6.                                           from tabla_imagen i2
  7.                                               left join
  8.                                                   tabla_etiquetas e2
  9.                                           on i2.idimagen=e2.idimagen
  10.                                        where i2.fecha='2000-02-01'
  11.                                             and e2.idetiqueta = 'A')
  12. and e.idetiqueta = 'C';

Resumiendo seleciono las C de entre las A
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 13/06/2012, 06:58
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta que cumpla varios criterios inner de etiquetado

Podríamos probar:
Código MySQL:
Ver original
  1.     TABLA_IMAGEN TI LEFT
  2.     JOIN TABLA_ETIQUETAS TE1 ON TI.IDIMAGEN = TE1.IDIMAGEN
  3.     JOIN TABLA_ETIQUETAS TE2 ON TI.IDIMAGEN = TE2.IDIMAGEN AND TE1.IDETIQUETA != TE2.IDETIQUETA
  4.     FECHA='1/2/2000'
  5.     AND
  6.     (TE1.IDETIQUETA = 'A' AND TE2.IDETIQUETA = 'C')

Por cierto: Las fechas nunca jamás se almacenan como varchar. Eso es una metida de pata enorme, que te va a traer serios problemas. Se usan DATE o DATETIME.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 14/06/2012, 01:40
Avatar de Pentaxeros  
Fecha de Ingreso: mayo-2008
Mensajes: 173
Antigüedad: 15 años, 11 meses
Puntos: 3
Respuesta: Consulta que cumpla varios criterios inner de etiquetado

Gracias!... no se porque pero no me han llegado las notificaciones de respuesta...

Lo de la fecha era un ejemplo, yo las uso normalmente en formato time.

Al final lo resolvi ayer de otra forma.

Use
GROUP_CONCAT(et.ETIQUETA) AS etiquetasextras

y después
GROUP BY p.products_id HAVING GROUP_CONCAT(et.ETIQUETA) LIKE '%".$textoetiqueta."%' AND GROUP_CONCAT(et.ETIQUETA) LIKE '%".$texto."%' ";

Funciona bien, pero los códigos que habéis propuesto me parecen mejor, así que les dare una vuelta.

Gracias!

Etiquetas: criterios, join, select, tabla
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 05:20.