Autor Zpráva
T-fon
Profil
Ahoj, poradíte prosím jak zjednodušit tento dotaz? Vymyslel jsem tuhle funkční obludnost, ale předpokládám, že se tabulka variable_list_values nemusí připojovat x-krát. Je v ní sloupec id_list, kde je třeba číslo 92 desetkrát a vedle sloupce id, kde je deset různých hodnot a za číslo 93 desetkrát atd atd. Snad je to pochopitelný. Databáze je pevně daná, strukturu měnit nelze.

SELECT nabidka.*, 
       vlv1 .` lang - czech ` as dispozice, 
       vlv2 .` lang - czech ` as vlastnictvi, 
       vlv3 .` lang - czech ` as objekt 
FROM   nabidka 
       left join variables_list_values vlv1 
              ON vlv1.value = nabidka.nemovitost_dispozice 
                 AND vlv1.id_list = 92 
       left join variables_list_values vlv2 
              ON vlv2.value = nabidka.nemovitost_vlastnictvi 
                 AND vlv2.id_list = 94 
       left join variables_list_values vlv3 
              ON vlv3.value = nabidka.nemovitost_druh_objektu 
                 AND vlv3.id_list = 31 
WHERE  nabidka.id = ? 
Keeehi
Profil
Třikrát se připojovat musí, protože k jednomu řádku chceš připojit jiné tři hodnoty podle třech různých sloupců. Nevidím nic, co by se dalo optimalizovat.
T-fon
Profil
Aha. A teď jsem si teprv všim, že je tam ještě nějaká spojovací tabulka, kde mj. v jednom sloupci jsou hodnoty nemovitost_dispozice, nemovitost_vlastnictvi,... (což odpovídá hodnotám v tabulce nabidka) a ve druhém 92,94,..., což odpovídá hodnotám v tabulce variable_list_values. Toho by se nějak využít nedalo?
Kajman
Profil
Propojování dat z více tabulek je možné i v aplikaci, jen to je potřeba dobře neprogramovat, aby se nedělalo zbytečně moc dotazů.
Srovnání dotazů do závislých tabulek
Snížení počtu dotazů v ORM
Ale osobně bych to řešil, až bych narazil na limit počtu joinů v jednom dotaze.

A dávat do názvu sloupců mezery a mínuska mi přijde jako špatný nápad.
T-fon
Profil
Díky oběma za rady, nechám to tak.
Jinak koukám že mezery tam nejsou, to se stalo asi při formátování...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0