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

La bonne façon de stocker des éléments avec des attributs filtrables ?

J'aime utiliser l'agrégation pour cela avec l'agrégation conditionnelle. Par exemple, pour votre première puce :

select a.carid
from attributes a
group by a.carid
having sum( (attribute, value) in ( ('color', 'red'), ('color', 'blue') ) ) > 0 and 
       sum( (attribute, value) in ( ('wheels', '2') ) > 0;

Le > 0 signifie que la combinaison attribut/valeur existe. Utilisez = 0 pour préciser que ça ne marche pas.