2 datensätze zufällig auslesen???

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

  • 2 datensätze zufällig auslesen???

    hallo, ich habe folgendes problem: ich möchte daten aus einer datenbank per zufall auslesen. mit meinem script kann ich das machen. doch jetzt möchte ich 2 datensätze auf einmal nach dem gleichen prinzip auslesen. wie kann ich die denn beide anzeigen wenn ich z.b. "order by rand() limit 2" mache ???


    PHP-Code:

    include("datos.php");

    mysql_connect($host,$usuario,$pass);

    $result=mysql_db_query($bd,"select * from $tabla2 order by rand() limit 1");

    $row=mysql_fetch_array($result);

    echo 
    "<A HREF='".$row['link']."' ><IMG SRC='images/" .$row['img']. "'></A>"

  • #2
    was hat dein test zu o.g. theorie ergeben?
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar


    • #3
      rand() liefert einen zufalswert zwischen 0 und 1, also ist deine erste query nichts zu nutzen.

      versuch :
      1)zuerst ganz normale "select * .." ausführen
      2)mit mysql_num_rows anzahl von datensätzen rauszufinden
      3)mit rand(0,$datensätzeanzahl-1) zufalswert zu generieren
      4)mit mysql_data_seek($resourse,$generiertezufalszahl);
      Zeiger auf den Zufalsdadensatz zu bewegen.
      Und einschlissend mit
      mysql_fetch_assoc($resourse) der datensatz zu lesen.
      5)3 und 4 noch ein mal wiederholen
      Slava
      bituniverse.com

      Kommentar


      • #4
        "order by rand() limit 2" sollte doch perfekt funktionieren.

        Allerdings würde ich der Effizienz zuliebe etwas anderes machen mit drei Aufrufen.
        Die komische Rechnerei in php macht, dass es nie zweimal der gleiche DS ist.

        select count(*) as anzahl from $tabla2
        in php: $ds1=rand(0,$anzahl-1), $ds2=rand(0,$anzahl-1),
        if($ds1==$ds2) $ds2=(++$ds2)%$anzahl;
        select * from $tabla2 limit $ds1,1
        select * from $tabla2 limit $ds2,1


        @ slava Узнáешь ли разницы?

        Kommentar


        • #5
          Original geschrieben von jhaase
          "order by rand() limit 2" sollte doch perfekt funktionieren.
          hm!
          hat hat wirklich hingehaut. ´(was ich eigentlich nicht erwartet habe)

          Jetzt verstehe ich aber nicht warum du 2 selects besser als 1 findest und mit php weitere spielereien machst?
          was für Effizienz willst du noch?
          Slava
          bituniverse.com

          Kommentar


          • #6
            @slava, wenn mysql das optimiert und nur zwei Datensätze betrachtet, ist es ok. Wenn es aber für (zB.) 250'000 Datensätze zuerst rand() bestimmt, und dann die 250'000 Zahlen+ID ordnet, wäre es eher etwas viel.

            Im sql-Manual ist die Technik bekannt, so dass es möglicherweise optimiert wird:
            ORDER BY RAND() combined with LIMIT is useful for selecting a random sample from a set of rows:
            mysql> SELECT * FROM table1, table2 WHERE a=b AND c<d ORDER BY RAND() LIMIT 1000;



            Zuletzt geändert von jhaase; 26.08.2006, 14:00.

            Kommentar


            • #7
              und wie wäre es mit dem einfachen testen?
              sogar bei myadmin kannst du direkt die Zeit anschauen.
              Slava
              bituniverse.com

              Kommentar


              • #8
                Testen? Ich habe keine grosse Datenbank und warte mal ab, was dem Frager besser dient.

                Kommentar

                Lädt...
                X