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

Wählen Sie Zeilen mit mehreren Tags aus ... gibt es einen besseren Weg?

Es ist nicht erforderlich, mehrere Joins durchzuführen. Wenn Sie alle Tags abgleichen müssen, können Sie einen IN verwenden -Klausel mit einer Unterabfrage wie dieser:

select p.sku, p.name, p.path 
from shop_products p
where p.sku in (
    select pc.product_sku 
    from shop_products_categories pc 
    inner join shop_categories c on pc.category_id = c.id
    where c.path in ('flowers', 'romance')
    group by pc.product_sku
    having count(distinct c.path) = 2
)

Beachten Sie, dass Sie die Zahl 2 anpassen müssen, um die Anzahl der eindeutigen Tags zu sein, mit denen Sie übereinstimmen. Passen Sie auf, falls es sich um vom Benutzer eingegebene Daten handelt und sie dasselbe Tag zweimal eingeben.