sql >> Databáze >  >> RDS >> Mysql

Vytvoření dotazu MySQL (tabulka meta_key/meta_value)

Rád k nim přistupuji pomocí group by a 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;

Alternativou je join . Pokud pro id neexistují žádné duplicitní hodnoty :

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

group by Tato metoda má výhodu škálovatelnosti a vyjadřitelnosti. Je snadné vyjádřit mnoho podmínek (barva není červená, vyrobeno v USA nebo Číně), které nejsou jednoduchou rovností. Také další podmínky mají velmi podobný výkon.

Druhý pravděpodobně funguje lépe (se správnými indexy) za několika podmínek.




  1. Neo4j - Vytvořte vztah pomocí Cypher

  2. Vícenásobné spojení s SQLAlchemy

  3. Kontingenční tabulka s nekardinálními hodnotami

  4. MySQL UTF8 export do Windows – import z Linuxu