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

Sélectionnez des lignes avec plusieurs balises... existe-t-il un meilleur moyen ?

Pas besoin de faire plusieurs jointures. Si vous devez faire correspondre toutes les balises, vous pouvez utiliser un IN clause avec une sous-requête comme celle-ci :

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
)

Notez que vous devrez ajuster le nombre 2 pour qu'il corresponde au nombre de balises uniques sur lesquelles vous faites correspondre. Méfiez-vous s'il s'agit de données saisies par l'utilisateur et qu'il saisit deux fois la même balise.