Autor | Zpráva | ||
---|---|---|---|
Cup Profil |
#1 · Zasláno: 19. 11. 2015, 19:30:43
Ahoj,
marně se snažím zprovoznit dotaz pro pohled, který by mi selectoval z databáze (postgres) překlady. Tabulka translation obsahuje sloupecky id, key, value, id_cat_locale. Chci vybírat podle id_cat_locale. Například "select * from translation where id_cat_locale = 'cs_CZ'". Angličtina je defaultní jazyk a ne vše je přeloženo. Rád bych aby to vybralo všechny klíče, které obsahuje jazyk 'en_GB' a k tomu, pokud je obsah v češtině, tak překlady v češtině. příiklad: select * from view_translations where id_cat_locale = 'cs_CZ' key | value | id_cat_locale game | hra | cs_CZ // je přeložen lang | language | en_GB // tento klíč není v češtině přelozen play | hrat | cs_CZ // je přeložen Díky moc za radu jak to poskládat |
||
tiso Profil |
Malo by to ísť nejak takto:
SELECT dt.key, COALESCE(lt.value, dt.value) AS value, COALESCE(lt.id_cat_locale, dt.id_cat_locale) AS id_cat_locale FROM view_translations dt LEFT JOIN view_translations lt ON dt.id_cat_locale = 'en_GB' AND lt.id_cat_locale = 'cs_CZ' AND dt.key = lt.key GROUP BY dt.key dt = default translation lt = locale translation |
||
Cup Profil |
#3 · Zasláno: 19. 11. 2015, 23:15:53
Diky, pokusil jsem se to sepsat, ale stale to nefunguje:
Pohled ze ktereho selectuji: CREATE OR REPLACE VIEW view_translation AS SELECT dt.msg_key, COALESCE(lt.msg_value, dt.msg_value) AS value, COALESCE(lt.id_cat_locale, dt.id_cat_locale) AS id_cat_locale FROM translation dt LEFT JOIN translation lt ON dt.id_cat_locale::text = 'en_GB'::text AND dt.msg_key::text = lt.msg_key::text; nasledny dotaz (pro italštinu mám přidaný pouze jeden záznam, tedy by měl být jeden v italštině, zbytek v angličtině): select * from view_translation where id_cat_locale = 'it_IT' "index.description";"POPISEK ITALSTINA";"it_IT" "index.description";"POPISEK ITALSTINA";"it_IT" :-/ |
||
tiso Profil |
#4 · Zasláno: 19. 11. 2015, 23:28:41
Zabudol som tú češtinu, doplnil som select, ale neviem či z toho spravíš view, asi musíš spraviť procedúru s parametrom
|
||
Cup Profil |
#5 · Zasláno: 19. 11. 2015, 23:56:50
Ok, zkusim to z toho nejak vymyslet. Kazdopadne diky za popichnuti :].
|
||
tiso Profil |
#6 · Zasláno: 20. 11. 2015, 00:53:53
Tú duplicitu riadkov som vyriešil cez GROUP BY
|
||
Cup Profil |
#7 · Zasláno: 20. 11. 2015, 08:19:59
Nakonec presne se mi podarilo udelat presne to co jsem chtel. Upozornuji, ze tento dotaz se vola pouze jednou, vysledky jsou nasledne nacachovane. Asi neni moc vytuneny pro vykon, ale dela presne to co sem chtel. Tedy kartezsky soucin vsech klicu se vsemi jazyky. Tam kde u jazyku neni nastavena hodnota, se dotahne hodnota z anglictiny.
Treba nekomu pomuze. Ale jak rikam, je cachovany. CREATE OR REPLACE VIEW view_translation AS WITH keys as ( SELECT msg_key from translation where id_cat_locale = 'en_GB' ), locales AS ( SELECT distinct id_cat_locale FROM translation ) select k.msg_key, coalesce( (select msg_value from translation t where id_cat_locale = l.id_cat_locale and msg_key = k.msg_key), (select msg_value from translation t where id_cat_locale = 'en_GB' and msg_key = k.msg_key) ) as msg_value, l.id_cat_locale from keys k, locales l |
||
Časová prodleva: 9 let
|
0