schlimmerfinger
01-04-2004, 14:38
Hi,
warum liefert mir die Abfrage immer das gleiche ergebnis?SELECT * FROM table ORDER BY RAND() LIMIT 1 Es sind drei datensätze vorhanden.
cheers
rand mysql
http://www.mysql.de/doc/de/Mathematical_functions.html#IDX1221
rand php
http://de.php.net/manual/de/function.rand.php
schlimmerfinger
01-04-2004, 15:59
Erst mal danke für die Antwort. Ich habe mir die Doku über die MySQL Funktion RAND ja schon durchgelsen und dachte, der oben beschriebene Query wär richtig. Was es anscheinend nicht war/ist. Ich wüsste jetzt nicht wie die Abfrage lauten müsste? Die PHP Variante möchte ich gerne -wenn möglich- erstmal ausser acht lassen. Wie lautet die richtige Abfrage.
cheers
die abfrage ist richtig, du hast nur zu wenig datensätze ... und wenn du
gesucht hättest, wüsstest du das schon längst ... kam hier auch schon
häufiger vor.
schlimmerfinger
01-04-2004, 16:25
Original geschrieben von Wurzel
die abfrage ist richtig, du hast nur zu wenig datensätze ... und wenn du
gesucht hättest, wüsstest du das schon längst ... kam hier auch schon
häufiger vor.
mhhm gesucht habe ich ja, nur keine Antwort auf meine Frage gefunden... vieleicht habe ich es übersehen. Ab wieviel Datensätze funktioniert es so wie es sollte.?
cheers
je mehr datensätze, desto rand ... im prinzip gehts ja auch mit 2 und
statistisch gesehen kommst du irgendwann immer zur normalverteilung
(hiess das so?) ... früher oder später
schlimmerfinger
01-04-2004, 17:16
Also ich habe beim test -wie oben geschrieben- drei Datennsätze gehabt. Bei ca. 10-15 abfragen kam immer wieder das selbe Ergebnis. Wenn das so ist, dann arbeite ich lieber mit der PHP Funktion rand und mysql_data seek. Danke nochmal für die Antworten.
cheers
Der Code
SELECT * FROM table ORDER BY RAND() LIMIT 1
ist vollkommen korrekt. Da gibt es nichts zu deuteln.
Ich verwende ihn seit Minimum 10 Jahren in PHP, Perl, JavaScript und Anderem unter Oracle/Informix/MySQL. Er funktioniert einwandfrei.
Aber:
Es gibt offensichtlich ein Problem mit PHP Version 4.4.x
Nur in dieser Version funktioniert dieser Code definitiv nicht einwandfrei. Das hat überhaupt nichts nicht der Anzahl von Datensätzen zu tun oder sonst irgendwelchen Trickereien. Es ist m.E. schlicht und ergreifend ein Bug im PHP bzw. dem lib. In einem Fall habe ich das PHP 4.4.2 durch 4.0.6 ersetzt und schwupps - es ging wieder.
Denn:
Gebe ich den Code in einem CGI-Script oder einem JavaScript eine oder direkt zu Fuß in der Datenbank, funktioniert er. Eingebunden in ein PHP-Script nicht.
Original geschrieben von ksausw
Aber:
Es gibt offensichtlich ein Problem mit PHP Version 4.4.x
Nur in dieser Version funktioniert dieser Code definitiv nicht einwandfrei. Das hat überhaupt nichts nicht der Anzahl von Datensätzen zu tun oder sonst irgendwelchen Trickereien. Es ist m.E. schlicht und ergreifend ein Bug im PHP bzw. dem lib. In einem Fall habe ich das PHP 4.4.2 durch 4.0.6 ersetzt und schwupps - es ging wieder.
das halte ich jetzt aber wieder für extrem unwahrscheinlich.
PHP übergibt ja lediglich dein SQL-statement an die datenbank - damit, welchen datensatz diese nun zufällig auswählt und zurückliefert, hat PHP absolut nichts am hut.
Bei einigen 3.x-Versionen von MySQL arbeitet RAND relativ unzufällig, vor allem wenn das Ergebnis mit LIMIT beschränkt wird.
Dies lässt sich mit folgendem Trick lösen:
SELECT * FROM table ORDER BY MD5(RAND())
oder noch eine Stufe heftiger:
SELECT * FROM table ORDER BY MD5(RAND(NOW()))
Wenn das immer noch keine Zufallszahlen erzeugen sollte, empfehle ich den Umstieg vom Abakus auf einen Rechner mit Prozessor. ;)