Query gesucht
am 16.11.2006 16:55:43 von Michael RassingerHallo!
Es geht um einige Webseiten, die dynamisch erstellt werden - und das auf
mehreren Sprachen. Im Management soll ersichtlich sein, welche Seiten
auf welchen Sprachen existieren. Deutsch ist quasi die Mastersprache -
Alle Seiten sind sicher auf Deutsch vorhanden.
Die Seiten sind in einer Tabelle namens "pages" organisiert. Das erste
Feld beinhaltet die ID der Seite, das zweite Feld die ID der Sprache,
der Rest der Felder den Inhalt. Seiten-ID (page_id) und Sprach-ID
(page_language) bilden gemeinsam einen unique key.
Beispiel:
page_id = 1; page_language = 'de'; page_title = "eine seite"; ...
page_id = 1; page_language = 'en'; page_title = "a page"; ...
page_id = 2; page_language = 'de'; page_title = "eine andere seite"; ...
page_id = 2; page_language = 'en'; page_title = "another page"; ...
page_id = 3; page_language = 'de'; page_title = "Schon wieder eine"; ...
....
Jetzt brauch ich ein Query, das mir in einer Spalte zurückgibt, ob eine
bestimmte Sprache existiert. (Es beschränkt sich übrigens nicht nur auf
Deutsch oder Englisch, es können noch mehr Sprachen sein.)
SELECT page_title, ??? FROM pages WHERE page_language='de';
Ja - den Ausdruck in ??? such ich jetzt. Query auf obiges Beispiel
angewandt sollte 3 rows zurückgeben, im ersten Feld der deutsche Titel
und im zweiten ob eine Seite auf $sprache verfügbar ist (also ID,
Anzahl, was auch immer).
Ich hab das schon versucht, indem ich die Tabelle mit sich selbst
geJOINed habe, aber das funktioniert bei zwei Sprachen schön, wenns mehr
werden wirds schrecklich unübersichtlich. So nested queries sind mir
eingefallen, im Stil von
SELECT page_title, (SELECT COUNT(*) WHERE...))...
aber da bin ich auf keinen grünen Zweig gekommen. Gibts eine Lösung, die
genauso einfach ist wie das Problem?
In weiterer Folge, das ist aber zweitrangig, besteht das Problem, daß
die Anzahl der Sprachen im Grunde beliebig ist und es eine Tabelle mit
allen verfügbaren Sprachen gibt. Das können 1, 2, 3, theoretisch
natürlich auch 100 Sprachen sein, was natürlich unwahrscheinlich ist.
Diese Sprachtabelle nennt sich languages, das erste Feld language_id
enthält den 2-letter-iso-code, das zweite den Namen in der Landessprache.
Kann man obiges Query dann so umformulieren, daß es für jede verfügbare
Sprache so eine Spalte erstellt? Die Anzahl der Spalten wäre dann
natürlich abhängig von der Anzahl der Einträge in languages. Gut, das
kann man aber auch über dynamisch erstellte Queries in PHP lösen, also
das ist nicht so wichtig...
So vielen Dank an alle dies geschafft haben bis hier zu lesen,
vielleicht hat der eine oder andere ja einen Lösungsvorschlag?
Dankeschön!