Mysql
 sql >> Base de données >  >> RDS >> Mysql

Requête MySQL pour rechercher des éléments avec certaines balises

si vous voulez l'article avec l'une des deux balises, alors :

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

si vous voulez que l'élément ait les deux balises, alors :

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

d'après votre commentaire

  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';

Cette requête donne l'identifiant et l'élément de la table des éléments. Il donne un article qui a à la fois une étiquette jaune et une étiquette de fruit. et les articles avec seulement une étiquette rouge.

si vous souhaitez obtenir des éléments avec deux balises et seulement deux balises, utilisez la condition suivante dans la clause have

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