Query gesucht

Query gesucht

am 16.11.2006 16:55:43 von Michael Rassinger

Hallo!
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!

Re: Query gesucht

am 16.11.2006 17:34:44 von NOSPAM_newsgroups

Hi

Michael Rassinger schrieb:
> =

> Hallo!
> Es geht um einige Webseiten, die dynamisch erstellt werden - und das au=
f
> mehreren Sprachen. Im Management soll ersichtlich sein, welche Seiten

[...]

> So vielen Dank an alle dies geschafft haben bis hier zu lesen,
> vielleicht hat der eine oder andere ja einen Lösungsvorschlag?

Ich verwende dafür 2 techniken, da bei der ersten davon auszugehen
ist, daß es mit hoher Wahrscheinlichkeit einen Eintrag in der Sprache
geben wird, bei der 2. ein Eintrag eher selten, und wenn dann oft
nicht in der gewünschten Sprache vorhanden ist.

Typ1:

id, class, title, de, en, fr, es, ru ...

und dann mit =

select title,de,en + sprache (wenn nicht de oder en) =

from table where class =3D 'menue'
=

und dann mit title (=3Dfeld/beschreibungsname) ein =

array befüllen bzw. damit verwenden.

aTitel[$row['title']]=3D
iif($row['fr']=='',
iif($row['en']=='',$row['de'],$row['en']),$row['fr']);

z.B. '.$aTitel['link'].'<

Typ2:
id, class, name, lang
select name,class,text,lang from =

where class=3D 'menue' and (lang=3Dde or lang=3D'fr')
order by title,lang

und dann

if (row['lang']==gewünschte Sprache)
$aTitle[row['title']]=3Drow['text']
elseif(!isset($aTitel[$row['titel']]))
$aTitle[row['title']]=3Drow['text']
endif; =


alles ein bischen vereinfacht dargestellt :-)

gruß n.Olivier
-- =

Nachbagauer Olivier - www.nOlivier.com
www.reedb.com - Immobilien national & international =

Webportal der Immobilien-Branche - www.Immofinder.de

Re: Query gesucht

am 16.11.2006 17:42:21 von Axel Schwenke

Michael Rassinger wrote:

> 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.
....

> 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).

Du suchst GROUP_CONCAT() in Verbindung mit GROUP BY page_id.

Da "ich will die deutsche Version von page_title" nicht als Aggregat
formulierbar ist, mußt du die Tabelle einmal mit sich selbst JOINen.
Etwa so:

SELECT a.page_title AS titel,
GROUP_CONCAT(b.page_language) AS sprachen
FROM pages AS a
JOIN pages AS b USING (page_id)
WHERE a.page_language = 'de'
GROUP BY a.page_id


XL