Mysql
 sql >> Datenbank >  >> RDS >> Mysql

MySQL-Abfrage, um nach Artikeln mit bestimmten Tags zu suchen

Wenn Sie den Artikel mit einem der beiden Tags haben möchten, dann:

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

Wenn Sie möchten, dass der Artikel beide Tags hat, dann:

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

basierend auf Ihrem Kommentar

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

Diese Abfrage gibt die ID und den Artikel aus der Artikeltabelle zurück. Es gibt Artikel, die sowohl ein gelbes als auch ein Fruchtetikett haben. und die Artikel mit nur rotem Tag.

Wenn Sie Elemente mit zwei Tags und nur zwei Tags erhalten möchten, verwenden Sie die folgende Bedingung in der Having-Klausel

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