Mysql
 sql >> Database >  >> RDS >> Mysql

Seleziona righe con più tag... c'è un modo migliore?

Non c'è bisogno di fare più join. Se devi abbinare tutti i tag, puoi utilizzare un IN clausola con una sottoquery come questa:

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
)

Nota che dovrai regolare il numero 2 in modo che sia il numero di tag univoci su cui stai abbinando. Fai attenzione nel caso in cui si tratti di dati inseriti dall'utente e inseriscano lo stesso tag due volte.