[MySQL 3.23.X] RAND liefert immer das gleiche ergebnis

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [MySQL 3.23.X] RAND liefert immer das gleiche ergebnis

    Hi,

    warum liefert mir die Abfrage immer das gleiche ergebnis?
    Code:
    SELECT * FROM table ORDER BY RAND() LIMIT 1
    Es sind drei datensätze vorhanden.

    cheers
    Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
    PHP Sicherheit
    PHPUnit[1-2]
    Professionelle Softwareentwicklung mit PHP 5
    Professionelle PHP 5-Programmierung

  • #2
    rand mysql
    http://www.mysql.de/doc/de/Mathemati...s.html#IDX1221

    rand php
    http://de.php.net/manual/de/function.rand.php
    mfg
    marc75

    <Platz für anderes>

    Kommentar


    • #3
      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
      Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
      PHP Sicherheit
      PHPUnit[1-2]
      Professionelle Softwareentwicklung mit PHP 5
      Professionelle PHP 5-Programmierung

      Kommentar


      • #4
        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.
        Kissolino.com

        Kommentar


        • #5
          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
          Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
          PHP Sicherheit
          PHPUnit[1-2]
          Professionelle Softwareentwicklung mit PHP 5
          Professionelle PHP 5-Programmierung

          Kommentar


          • #6
            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
            Kissolino.com

            Kommentar


            • #7
              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
              Zuletzt geändert von schlimmerfinger; 01.04.2004, 16:18.
              Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jedermann ist davon überzeugt, dass er genug davon habe – René Descartes
              PHP Sicherheit
              PHPUnit[1-2]
              Professionelle Softwareentwicklung mit PHP 5
              Professionelle PHP 5-Programmierung

              Kommentar


              • #8
                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.

                Kommentar


                • #9
                  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.
                  I don't believe in rebirth. Actually, I never did in my whole lives.

                  Kommentar


                  • #10
                    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:

                    PHP-Code:
                    SELECT FROM table ORDER BY MD5(RAND()) 
                    oder noch eine Stufe heftiger:

                    PHP-Code:
                    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.
                    Happiness is an empty error log

                    Kommentar

                    Lädt...
                    X