Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Erstellen Sie eine MySQL-Abfrage (meta_key/meta_value-Tabelle)

Ich nähere mich diesen gerne mit group by und having :

select id
from t
where (meta_key = 'color' and meta_value = 'red') or
      (meta_key = 'price' and meta_value = '10')
group by id
having count(distinct meta_key) = 2;

Eine Alternative ist ein join . Wenn es keine doppelten Werte für eine id gibt :

select id
from t tc join
     t tp
     on tc.id = tp.id and
        tc.meta_key = 'color' and tc.meta_value = 'red' and
        tp.meta_key = 'price' and tp.meta_value = '10';

Die group by Methode hat den Vorteil der Skalierbarkeit und Ausdrückbarkeit. Es ist einfach, viele Bedingungen (Farbe ist nicht rot, hergestellt in den USA oder China) auszudrücken, die keine einfache Gleichheit sind. Außerdem haben zusätzliche Bedingungen eine sehr ähnliche Leistung.

Der zweite schneidet wahrscheinlich unter einigen Bedingungen besser ab (mit den richtigen Indizes).