Autor Zpráva
whoami
Profil
Zdravím,

mohu se optat či mi někdo neporadí jak na můj problém? Dejme tomu že mám 3 tabulky:

Země
id
název

Jazyky
id
kód

Překlady
id
země_id
jazyk_id
překlad

Obsah je například:

Země:
1,Česká Republika
Jazyky:
1,en
2,sk
Překlady:
1, 1, 1, Czech Republic
2, 1, 2, Česká Republika

A jádro mého pudla je v tom, že bych potřeboval dotaz, který vrátí výsledek v podobě:
id(země), název(země), název_en(z překladů a pokud není tak NULL), název_sk(z překladů a pokud není tak NULL) - [název_"kód"]
1, Česká Republika, Czech Republic, Česká Republika

A tento dotaz by měl podporovat přidání jazyka do tabulky k tomu určené a automaticky přidat sloupec (dynamicky)..


Velice děkuji za nápady.
Kajman
Profil
SELECT z.id,
       z.nazev,
       en.preklad nazev_en,
       sk.preklad nazev_sk
FROM   zeme z
       LEFT JOIN preklady en
              ON z.id = en.zeme_id
                 AND en.jazyk_id = 1
       LEFT JOIN preklady sk
              ON z.id = sk.zeme_id
                 AND sk.jazyk_id = 2

Po přidání jazyka musíte dotaz (view) upravit.
whoami
Profil
Kajman:
Takto to není problém udělat.. jenže těch tabulek je zaneseno tolik že je vždy problém upravit takové množství view.. aplikace již dynamicky udělaná je a proto jsem přemýšlel zda si pomocí nějakého lepšího (i na úkor rychlosti) zápisu nemohu práci ulehčit..
Tori
Profil
whoami:
Pokud smí mít DB uživatel odpovídající oprávnění (na změnu view), můžete si (v PHP) views automaticky přegenerovávat po přidání/odebrání překladu.
Kajman
Profil
Nebo si udělejte v aplikaci tři jednoduché dotazy na obsah tabulek a seskládejte těch víc sloupců až v aplikaci.
whoami
Profil
Tori, Kajman:
Oboje je možné.. nejspíš to tak bude muset být.. jen jsem chtěl zjistit, či není možné automatizovat tento proces..
+ se vyhnout: AND en.jazyk_id = 1 (konkrétní id)

prostě něco ve stylu SELECT zeme.id, zeme.nazev, (SELECT jazyků + něaký concat či něco) FROM zeme... aby to bylo absolutně dynamické a bez fixních věcí jako jsou id jazyků atp..

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