sql >> Database >  >> RDS >> Mysql

MySQL-query maken (tabel meta_key/meta_value)

Ik benader deze graag met behulp van group by en 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;

Een alternatief is een join . Als er geen dubbele waarden zijn voor een id :

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';

De group by methode heeft het voordeel van schaalbaarheid en uitdrukbaarheid. Het is gemakkelijk om veel voorwaarden uit te drukken (kleur is niet rood, vervaardigd in de VS of China) die geen eenvoudige gelijkheid zijn. Aanvullende voorwaarden hebben ook zeer vergelijkbare prestaties.

De tweede presteert waarschijnlijk beter (met de juiste indexen) onder een aantal voorwaarden.




  1. Opgeslagen procedurefout PLS-00201:identifier 'UTL_HTTP' moet worden gedeclareerd

  2. Geen oci8-module in phpinfo()

  3. mySQL-groep op naam van lid

  4. debug mysqli-query met of sterf mysqli_error