Unterabfrage

diese Abfrage funktioniert manchmal. warum nicht immer?

SELECT produkt_id AS id, produktname, produktbeschreibung,
(SELECT bild_id FROM shop_bilder WHERE produkt_id=id ORDER BY RAND() LIMIT 1) AS bildid,
(SELECT bildname FROM shop_bilder WHERE bild_id=bildid) AS bildname,
(SELECT typ FROM shop_bilder WHERE bild_id=bildid) AS typ
FROM shop_produkte
GROUP BY shop_produkte.produkt_id
ORDER BY hitliste DESC

Ergebnis wird so ausgegeben
[PHP]
Array ( [id] => 3020 [produktname] => Kinderschlafsack [produktbeschreibung] => Bunter Kinderschlafsack. [bildid] => 7 [bildname] => [typ] => )
Array ( [id] => 3022 [produktname] => Kinderschlafsack [produktbeschreibung] => Kinderschlafsack m [bildid] => 11 [bildname] => Img_0081 [typ] => jpg )
Array ( [id] => 3023 [produktname] => Kinderschlafsack [bildid] => 14 [bildname] => [typ] => )
Array ( [id] => 3024 [produktname] => Schlafsack - Designer [produktbeschreibung] => Designe deinen eigenen Schlafsack [bildid] => 65 [bildname] => Bild3 [typ] => jpg )
Array ( [id] => 3028 [produktname] => Babyschlafsack [produktbeschreibung] => Babyschlafsack [bildid] => 33 [bildname] => [typ] =>
[/PHP]

man sieht also die bildid kommt immer. manchmal wird ein bildname ausgegeben und manchmal der bildtyp (jpg oder gif). manchmal auch alles beides. aber warum gibt er mal was aus und mal nicht

vermutung mit RAND, aber wie mache ich es richtig?

ich will zu einem Produkt, welches mehrere Bilder hat, per Zufall ein Bild auswählen und anzeigen.

Hallo Roland,

welchen SQL-Dialekt verwendest Du? Eigentlich bedeutet „ORDER BY“, dass man das Ergebnis nach der Spalte, die man auch als nummerische Durchzählung angeben kann.

Jetzt zum Datenmodell: Ich habe aus den Angaben heraus gelesen, dass Du eine Tabelle shop_produkt mit den Attributen produkt_id, produktname und produktbeschreibung hast und eine Tabelle shop_bilder mit den Attributen bild_id, produkt_id, bildname, typ. Du willst ein beliebiges Bild für ein vorgegeben produkt_id haben. Soweit korrekt?

Kann man davon ausgehen, dass die bild_id unabhängig von der produkt_id ist (also den PK von der Tabelle shop_bilder ist)? Weiterhin ist die Bildanzahl von Produkt zu Produkt natürlich unterschiedlich, um das ganze etwas zu erschweren?

Ich glaube kaum, dass diese Aufgabe ohne Modelländerung mit einem SQL-Statement gelöst werden kann.

MfG Georg V.

doch georg es wurde gelößt. übrigens ich arbeite mit mysql
und die lösung sieht folgendermassen aus:

  1. SELECT produkt_id AS id, produktname, produktbeschreibung,
  2. @BILDID:=(SELECT bild_id FROM shop_bilder
  3. WHERE produkt_id=id ORDER BY RAND() LIMIT 1) AS bildid,
  4. (SELECT bildname FROM shop_bilder
  5. WHERE bild_id = @BILDID) AS bildname,
  6. (SELECT typ FROM shop_bilder
  7. WHERE bild_id = @BILDID) AS typ
  8. FROM shop_produkte
  9. ORDER BY hitliste DESC

wäre aber auch nicht drauf gekommen, aber so geht es wie gewünscht