sql >> Base de Datos >  >> RDS >> Mysql

¿La forma correcta de almacenar artículos con atributos filtrables?

Me gusta usar agregación para esto con agregación condicional. Por ejemplo, para tu primera viñeta:

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;

El > 0 significa que la combinación atributo/valor existe. Utilice = 0 para especificar que no funciona.