Viennamade: Ersatz für Subselect - Auf ein Neues!

Beitrag lesen

Hallo Ilja!

Leider.

SELECT ....
FROM tabelle_bilder AS b
LEFT JOIN tabelle_bildertexte AS bt ON (b.picnr = bt.bildnr)
LEFT JOIN tabelle_sprachen AS s ON (bt.sprache = s.langnr AND s.kuerzel='DE')
WHERE b.osname='Kuh.jpg'

oder kurzform

SELECT ....
FROM tabelle_bilder AS b
LEFT JOIN tabelle_bildertexte AS bt ON (b.picnr = bt.bildnr AND bt.sprache='1')
WHERE b.osname='Kuh.jpg'

beides sollte in jedem fall mindestens einen datensatz liefern.

Die Kurzform funktioniert perfekt. Die gewünschte Langform leider nicht.
-----------------------------      -------------------------------------------- -----------------
Tabelle_Bilder                     Tabelle_Bildertexte                          Tabelle_Sprachen
-----------------------------      -------------------------------------------- -----------------
PicNr    osname      pxhoehe       PicID     Bildnr Text                Sprache LangNr    Kuerzel
[PRIMARY]                          [PRIMARY]                                    [PRIMARY]
-----------------------------      -------------------------------------------- -----------------
1        Kuh.jpg     400           1         1      Das ist eine Kuh    1       1         DE
2        Hund.jpg    450           2         1      This is a cow       2       2         EN
3        Schwein.jpg 500           3         3      Das ist ein Schwein 1
4        Gans        600           4         4      This is a goose     2       v
                                                                                |
^                                            v                          ^       |
|                                            |                          |       |
|                                            |                          |       |
+--------------------------------------------+                          +-------+

Beispiel ....
SELECT s.LangNr, s.Kuerzel, bi.PicNr, bitxt.BildNr,bi.osname, bi.pxhoehe, bi.pxbreite, bitxt.alttag, bitxt.title
  FROM Bilder AS bi LEFT JOIN Bildertexte AS bitxt ON (bi.PicNr = bitxt.BildNr)
  LEFT JOIN Sprachen AS s ON (bitxt.Sprache = s.LangNr AND s.Kuerzel='EN')
  WHERE bi.osname = 'Schwein.jpg'
... retourniert ...
Array
(
    [LangNr] =>
    [Kuerzel] =>
    [PicNr] => 214
    [BildNr] => 214
    [osname] => Schwein.jpg
    [pxhoehe] => 11
    [pxbreite] => 205
    [alttag] => Das ist ein Schwein   <- hier gehört eigentlich nichts her
    [title] => Das ist ein Schwein   <- hier gehört eigtenlich nichts her
)
... also wird der deutsche Datensatz genommen, obwohl englisch abgefragt wird (s.Kuerzel='EN')!

Nach einigen Tests kann ich zusammenfassen:
Die Abfrage funktioniert nicht,
 - wenn in Bildertexte nur ein Datensatz DE vorhanden und EN abgefragt wird (oder umgekehrt)
Die Abfrage funktioniert in allen anderen Fällen:
 - wenn in Bildertexte gar kein Datensatz vorhanden ist.
 - wenn eine Sprache abgefragt wird, zu der es in Bildertexte auch eine Entsprechung gibt.

Verstehe es nicht, am obigen Beispiel finde ich interessant, daß in  [LangNr] und [Kuerzel] gar nix drinnen steht.

Vielen Dank für Deine Bemühungen und Beste Grüße
Viennamade