Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Selecione linhas com várias tags... existe uma maneira melhor?


Não há necessidade de fazer várias junções. Se você precisar corresponder a todas as tags, poderá usar um IN cláusula com uma subconsulta como esta:
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
)

Observe que você precisará ajustar o número 2 para ser o número de tags exclusivas com as quais você está correspondendo. Cuidado caso sejam dados inseridos pelo usuário e eles insiram a mesma tag duas vezes.