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

Optimalizace MySQL na filtrování párů klíč-hodnota jako záznamů

To by vám mělo přinést to, co potřebujete... Každou z podmínek klauzule „OR“d where, můžete jednoduše přidávat jako kvalifikovanou položku. Pak stačí upravit klauzuli "Having" tak, aby splňovala stejný počet jako kritéria, která povolujete...Na první místo jsem umístil tabulku vztahů, protože by měla menší odpovídající sadu na "Hodnota" hodnot města nebo typu. Ujistěte se, že máte index v tabulce vztahů ve sloupci "VALUE".

SELECT STRAIGHT_JOIN
      rel.id_obj
   from 
      relations rel
         join attributes atr
            on rel.id_addr = atr.id
   where 
         ( rel.value = 'Apartment' AND atr.name = 'Type'  )
      or ( rel.value = 'Some City' AND atr.name = 'City' )
   group by 
      atr.id_obj
   having
      count(*) = 2
   limit
      0, 20

Pokud chcete všechna skutečná data objektu Z těchto výsledků, zabalili byste to něco jako...

select obj.*
   from 
      ( complete SQL statement above ) PreQuery
         join Object obj on PreQuery.id_obj = obj.id



  1. MySQLi PHP:Zkontrolujte, zda byl dotaz SQL INSERT plně úspěšný pomocí MySQLi

  2. Server se automaticky zavírá a čelí chybě 'ERR_STREAM_WRITE_AFTER_END' spolu s odesíláním dat pokaždé klientovi

  3. Jak předat proměnnou do klauzule IN?

  4. seřadit uživatele na základě bodů