Autor Zpráva
slovakCZ
Profil
AHoj,

mám takový (jednoduchý) dotaz. Mám databázi kde mám následující data:
id - page_id - lang_id - title
1 - 1 - 1 - Uvodni strana
2 - 1 - 2 - Homepage
3 - 2 - 1 - Produkty
4 - 2 - 2 - Products
5 - 3 - 2 - Contact
6 - 3 - 1 - Kontakt
7 - 4 - 2 - Donate

tabulka představuje seznam stránek na webu.
ID je vždy jedinečné id každé stránky,
PAGE_ID je id stránek, které patří k sobě (např uvodni strana a homepage, tyto stránky jsou vpodstatě totožné, jen každá v jiném jazyce),
LANG_ID určuje id jazyku (zatím cz a en).

Problém mám při výpisu stránek v jakési "administraci". V této administraci chci vypsat všechny stránky ovšem "zgroupované podle page_id". Výsledná tabulka by měla vypadat tedy nějak takto (stranka je prelozena v jazycich a stranku je potreba prelozit do jazyku nyni ignorujme, to uz mam vyresene a to mi funguje):
Titulek stránky - stránka je dostupná v jazycích - stránku je potřeba přeložit do jazyků
Úvodní strana - cz, en - preklad je kompletni
Produkty - cz, en - preklad je kompletni
Kontakt - cz, en - preklad je kompletni
Donate - en - cz


problém mám te, že výsledky se mi řadí takto:
Titulek stránky - stránka je dostupná v jazycích - stránku je potřeba přeložit do jazyků
Úvodní strana - cz, en - preklad je kompletni
Produkty - cz, en - preklad je kompletni
Contact - cz, en - preklad je kompletni /* zde je problem, stranka CONTACT ma mensi ID nez stranka KONTAKT, proto se vypise jeji anglicka mutace */
Donate - en - cz

To znamená, že když je v databázi např stránka Kontakt, ale její anglický "klon" je v databázi uložen před českým, tak se do této tabulky vypíše titulek anglický. Je tedy možné nějakým způsobem ošetřit to, aby se v tabulce zobrazovaly u titulku vždy české názvy stránek (v případě, že jsou) a když ne, tak anglické (když nebude ani anglický překlad, tak např německý atd...). Je ovšem brát v úvahu i to, že administrátor může nové mutace webu dynamicky přidávat.. nemůžu tedy do skriptu natvrdu napsat nějakou podmínku typu: if LANG=1 tak vypiš to a to ELSE vypiš něco jiného....


zatím data vypisuji takto:
            $query = mysql_query("SELECT * FROM $t_pages GROUP BY page_id");
            while($o = mysql_fetch_object($query)){
                echo '
                    <tr>
                        <td>'.$o->title.'</td>
                        <td>'.pageIsAvailableInLanguages(fce ktera zjisti v jakych jazycich je tato stranka jiz prelozena na zaklade page_id).'</td>
                        <td>'.pageMustTranslate(fce ktera zjisti do jakych jazyku je tato stranka potreba prelozit na zaklade page_id).'</td>
                    </tr>
                    ';
            }



Děkuji vám za rady
fajzen
Profil
slovakCZ:
SELECT * FROM $t_pages WHERE lang_id = (SELECT MIN(lang_id) FROM $t_pages) OR id IN (SELECT id FROM $t_pages WHERE page_id NOT IN (SELECT page_id FROM $t_pages WHERE lang_id = (SELECT MIN(lang_id) FROM $t_pages)) GROUP BY page_id)

vyzerá to dosť divoko, ale nič ľahšie ma pomocou jednej query nenapadlo...
predpokladá sa, že defaultný jazyk je ten s najmenším id... ak by si chcel určiť nejaký iný, musíš dať namiesto
(SELECT MIN(lang_id) FROM $t_pages)
id požadovaného defaultného jazyka
Kajman_
Profil *
Šlo by to i takto nějak
select t.page_id, ifnull(cesky.title, t.title) title, t.jazyky
from   (select page_id group_concat(lang_id) jazyky, min(title) title
        from   `$t_pages`
        group  by page_id) t
left   join `$t_pages` cesky
on     cesky.page_id = t.page_id
       and cesky.lang_id = 1


Nebo méně systémově, když v title bude např. znak ^...
select page_id,
       group_concat(lang_id) jazyky,
       substring_index(group_concat(title order by lang_id separator '^'),'^',1) title
from   `$t_pages`
group  by page_id
slovakCZ
Profil
dekuji vam za ochotu!! pomohlo mi to ;)

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