Ich habe eine Datenbank die mit mehreren Artikel verschiedener Warengruppen bestückt ist. Einer der Warengruppen nennt sich Specials und beinhaltet ca. 20 Artikel.
Auf der Startseite des Shops möchte ich nun immer vier Artikel der Specials durch Zufall anzeigen lassen.
Bei rand() muß ich jedoch immer (so glaube ich zumindest) einen Start- und einen Endwert festlegen. Das kann ich aber bei einer Abfrage nicht machen das ich nicht weiß wo sich die Artikel mit der Warengruppe Specials befinden.
Normalerweise hätte ich mir die Anzahl der Datensätze aus der Datenbank ausgeben gelassen und hätte dann von 1 bis Ende der Datenbank eine Zufallszahl generieren lassen. Die Zufallszahl wäre dann immer die ID in der Datenbank.
Allerdings wenn ich einen Datensatz aus der Datenbank lösche, wird die ID wegfallen und mir fehlt eine ID. 1,2,wurde gelöscht,4,5,6. Wenn meine Zufallszahl nun die 3 wäre, bekäme ich kein Ergebnis.
So ich hoffe ich konnte euch mein Problem erläutern und ihr könnt mir helfen.
Es wäre super wenn es funktionieren würde. Ich habe nun schon alle erdenktliche versucht. Aber es kommt immer supplied argument. Ich habe es mit einer simplen Tabelle gemacht und es geht noch immer nicht. Ich konnte auch in dem MySQL Handbuch auf den ersten Blick keine Rand() BEfehl entdecken. Hast du vielleicht eine Ahnung wo der Fehler liegt.
Anbei die Fehlermeldung:
SELECT * FROM portal ORDER BY RAND() LIMIT 0,1
MySQL meldet:
You have an error in your SQL syntax near ‚RAND() LIMIT 0,1‘ at line 1
ORDER BY in zusammenhang mit der RAND() funktion gibts erst ab mysql-version 3.23.2 (http://www.mysql.com/doc/N/e/News-3.23.2.html) dann hast du wohl noch eine veraltete mysql-version am laufen
Ich habe das einmal so gemacht:
Mit select count() from … die Anzahl der Artikel holen, Zufallszahl zwishen 0 und Anzahl-1 erzeugen, und mit
select … limit Zufallszahl,1 den entsprechenden Datensatz abrufen.