sql >> Base de Datos >  >> RDS >> Mysql

Consulta MySQL para buscar elementos con ciertas etiquetas

si desea el artículo con cualquiera de las dos etiquetas, entonces:

select distinct item_id, item_name 
from items_tags 
where tag_name in ('yellow', 'fruit'); 

si desea que el artículo tenga ambas etiquetas, entonces:

select item_id, item_name 
from items_tags 
where tag_name in ('yellow', 'fruit')
group by item_id, item_name
having count(*) = 2; 

basado en tu comentario

  select a.id, a.item 
    from items a, items_tags b, tags c 
   where a.id = b.item_id
     and b.tag_id = c.id
group by id, item
  having (group_concat(c.tag) like '%yellow%' 
         and  group_concat(c.tag) like '%fruit%')
      or group_concat(c.tag) = 'red';

Esta consulta proporciona la identificación y el elemento de la tabla de elementos. Da un artículo que tiene una etiqueta amarilla y de fruta. y los artículos con solo etiqueta roja.

si desea obtener elementos con dos etiquetas y solo dos etiquetas, use la siguiente condición en la cláusula que tiene

(group_concat(c.tag) like '%yellow%' 
and group_concat(c.tag) like '%fruit%'
and count(*) = 2)