Viennamade: Ersatz für Subselect

Beitrag lesen

Hallo Andreas,

Ich habe einen Abfragebedarf auf 3 Tabellen:
und diese unübersichtlich beschriftet:

aber dann doch verschönert:

Ich verwende MySQL-Version 3.23.52-log.
Folgendes soll die 3 Tabellen darstellen. Ich kann deren Aufbau nimmer ändern.

-----------------------------      -------------------------------------------- -----------------
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                          ^       |
|                                            |                          |       |
|                                            |                          |       |
+--------------------------------------------+                          +-------+

Ich habe Deinen Abfrageentwurf auf die (hoffentlich) übersichtlichere Tabelle umgeschrieben:

SELECT s.LangNr, s.Kuerzel, bi.PicNr, bitxt.BildNr,bi.osname, bi.pxhoehe, bi.pxbreite, bitxt.alttag, bitxt.title
  FROM Bilder AS bi,Bildertexte AS bitxt,Sprachen AS s
  WHERE
    bi.osname = 'Schwein.jpg'             <--- $a
    AND s.Kuerzel = 'DE'                  <--- $b
    AND bi.PicNr = bitxt.BildNr
    AND bitxt.Sprache = s.LangNr

Leider mit gleichem Mißerfolg wie in manchen der vielen Postings zu diesem Thread.
Das Ergebnis der Abfrage oben ist
Array
(
    [LangNr] => 1
    [Kuerzel] => DE
    [PicNr] => 214
    [BildNr] => 214
    [osname] => Schwein.jpg
    [pxhoehe] => 11
    [pxbreite] => 205
    [alttag] => Das ist ein Schwein
    [title] => Das ist ein Schwein
)
und das ist absolut korrekt. Ändere ich $b jedoch in 'EN', dann wird überhaupt kein Datensatz zurückgegeben. Korrekt wäre jedoch ein Datensatz. Die Felder aus Tabelle_Bilder müßten Werte enthalten (z.B. osname=Schwein.jpg ), die Felder aus Tabelle_Bildertexte müßten dann leer sein.

Wenn Du das letzte Posting von Ilja liest (15. September 2004, 18:49), dann meint er - sicher zu recht - daß das Tabellendesign schlecht wäre. Zumindest der Punkt a) seiner dortigen Erklärungen sind mir unklar.

Recht herzlichen Dank für Deine Bemühungen,
Viennamade