rand()-Funktion funktioniert nicht richtig

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

  • rand()-Funktion funktioniert nicht richtig

    Hallo,

    ich gebe bei erneutem Aufruf einer Seite jeweils ein Bild per Zufallsauswahl aus. (die Bildernamen sind in der DB gespeichert, die Bilder im Verzeichnis).

    Ich verwende hierfür die rand()-Funktion mit
    $muehle=mysql_query("select * from $tabelle where (ObjArt= 'Muehle') and (aktiv='ja') order by rand()");


    Es stehen ca. 40 Bilder zur Auswahl, also jedes Bild hat eine Chance von 1/40 angezeigt zu werden, nur habe ich nun eindeutig festgestellt, daß häufig immer nur ein Bild aufgerufen wird, also wenn ich z.B. die Seite 20 mal aufrufe, dann ca. 10 mal immer das gleiche Bild aufgerufen wird und nur 10 mal andere Bilder. Arbeitet hier die rand()-Funktion nicht richtig oder mache ich hier was falsch?

  • #2
    also rand arbeitet immer mit den gleichen zahlen und wenn du den zufallszahlen pot, so will ich ihn mal nennen nicht immer neu generierst dann wirst du sehr oft das gleiche ergebniss bekommen.

    am einfachsten ist glauebe ich sich in php eine zufallszahl zu genarieren und dann diese zahl als id für das bild zu nehmen.

    bestimmt geht das auch in der datenbank, da kann ich dir aber nicht sagen wie.

    in php wurdest du dann immer erst randomize() aufrufen und danach deine zufalls zahl generieren
    Wusstet ihr schon?
    Wer später bremst ist länger schnell!

    Die wahrscheinlich beste Funktion in PHP ist mysql_error(), doch leider auch die unbekannteste!

    Kommentar


    • #3
      ich habe jetzt mal einen anderen Startwert festgelegt mit:

      srand ((double)microtime() * 1000000); // Zufallsgenerator starten

      rand() ergibt eine Zufallszahl zwischen 0 und 1


      Das Ergebnis ist besser, aber immer noch nicht so wie es sein soll,

      muß ich vielleicht der Funktion rand einen anderen min und Max - Wert mitteilen, z.B. einen höheren mit

      rand(0, 1000)

      aber da bekomme ich eine Fehlermeldung

      Was ich noch nicht so ganz verstehe ist:
      order by rand()");

      das würde doch übersetzt heißten: order by 2, oder order by 4 .....

      das gibt doch keine Sinn, oder steh ich hier auf der Leitung?

      Kommentar


      • #4
        order by rand() im sql-string heißt: lieber sql-server bitte schick mir das ergebniss wild durcheinander gewürfelt
        Aber:
        RAND() is not meant to be a perfect random generator, but instead a fast way to generate ad hoc random numbers that will be portable between platforms for the same MySQL version.
        der php-funktion rand kannst du natürlich werte übergeben
        int rand ( [ int min [, int max]])
        steht übrigens auch im handbuch: http://www.php.net/manual/de/function.rand.php

        achja, ich denke es wäre besser wenn du noch ein "limit 1" in den sql-string reinbastelst (willst ja nur ein bild haben oder?)
        Zuletzt geändert von mrhappiness; 29.01.2003, 17:52.
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          habe nun Limit 1 gesetzt,

          aber wenn ich nun einen Min und Max - Wert in die rand-Funktion einsetze dann bekomme ich eine Fehlermeldung mit
          "Supplied argument is not a valid MySQL result resource in d:\apache\htdocs\portal.php on line 1045"

          .....order by rand(0,999) ....");

          was läuft hier falsch?

          Kommentar


          • #6
            Ich gehe mal davon aus, das Dir noch nicht bekannt ist, das das Entwicklerteam von MySQL ein hervorragendes Handbuch im Internet zur Verfügung stellt ... sonst hättest Du schließlich allda nachgeschaut und hier nicht so eine (dä***e) Frage gestellt. Hier also erstmal der Link: http://www.mysql.com/doc/en/index.html

            Die Mathematischen Funktionen werden hier erklärt: http://www.mysql.com/doc/en/Mathematical_functions.html

            Die MySQL-Funktion RAND() kann entweder mit oder ohne Parameter aufgerufen werden ... Rufst Du sie mit Parameter auf, dann bitte nur mit einem und dieser stellt eine RANDOM_SEED dar. Der Aufruf ohne Parameter generiert wirklich sehr häufig gleiche Werte aus diesem Grunde ist das gerade erwähnte Vorgehen anzuraten.

            Ein Aufruf könne beispielsweise so aussehen:
            PHP-Code:
            $muehle=mysql_query("select * from $tabelle where (ObjArt= 'Muehle') and (aktiv='ja') order by rand(".time().")"); 
            Viel Spaß damit.
            carpe noctem

            [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
            [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

            Kommentar


            • #7
              in der Tat hätte mir diese Info zur Info genügt, als danke für den Link, habe ihn mir aufs Desktop gezogen,

              da ich bei den bisherigen Beiträgen nichts gefunden habe, hab ich mir erlaubt, diese Frage zu stellen

              Kommentar


              • #8
                So ist das brav ... ohne Suchfunktion gibt's das hier: http://www.mysql.de/documentation/mysql/bychapter/
                auch nochmal in deutsch ...
                carpe noctem

                [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                Kommentar


                • #9
                  .... jetzt wirds immer besser

                  Kommentar

                  Lädt...
                  X