Autor Zpráva
Radek Tůma
Profil *
Dobrý den,
mám databázi se zeměpisnými entitami - používám velký sjednocovací dotaz, kterým vracím všechny entity a v které zemi leží. Struktura jak tabulek, tak jednotlivých dotazů, které jsou částí velkého sjednocovacího dotazu, je daleko složitější a je jich také více. Záměrně jsem to pro lepší pochopení toho, co chci, udělal jednoduché. Strukturu jednotlivých tabulek i jednotlivých dotazů mám shodnou.

$query = "select mesta.nazev as 'entita', zeme.nazev as 'zeme' from zeme left join mesta on (mesta.zeme_id = zeme.id)";

$query. ="union select reky.nazev as 'entita', zeme.nazev as 'zeme' from zeme left join reky on (reky.zeme_id = zeme.id)";

$query. ="union select hory.nazev as 'entita', zeme.nazev as 'zeme' from zeme left join hory on (hory.zeme_id = zeme.id)";


Protože ty dotazy jsou ve skutečnosti složité, ale stejně konstruované - a v případě změn musím editovat každý dotaz, napadlo mně, zda se by to nedalo udělat tak, že by byl v kódu jen jeden dotaz jako proměnná, a ten se k sobě tolikrát unionem připojil, kolik je entit - ale jak v té první proměnné měnit entitu? Takhle nějak si to představuji:

$query = "select $entita.nazev as 'entita', zeme.nazev as 'zeme' from zeme left join $entita on ($entita.zeme_id = zeme.id)";
$entita="mesta";
$union_query = $query;
$union_query. = union $query;
$entita="reky";
$union_query. = union $query;
Keeehi
Profil
function q ($entita) {
    return "select $entita.nazev as 'entita', zeme.nazev as 'zeme' from zeme left join $entita on ($entita.zeme_id = zeme.id)"; 
}

$query = q("mesta");
$query .= " union ". q("reky");
$query .= " union ". q("hory");
Radek Tůma
Profil *
Keeehi:
Přesně tohle jsem potřeboval. Děkuji moc!

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: