SQL: Zufällig Datensätze ausgeben

Roberto

Angesehenes Mitglied
Moin
Frage: Wenn ich ne ganz normale sql tabelle hab aber ohne id´s oder so, wie kann ich denn mit einem normalen sql select befehl random datensätze ausgeben? gibts da n special befehl?
 
<?php
$sql = mysql_query(" SELECT datensatz FROM tabelle ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_object($sql))
{
echo "$row->datensatz";
}
?>
 
läuft, danke! obwohl es ja bei 133.000 datensätzen schon ein wenig dauert hihi

CODE [/CODE]$sql = "SELECT resource , title , description, topic FROM deutsch ORDER BY RAND() limit 0, 500;";
 
Warum das Herz im Titel?
biggrin.gif
 
QUOTE (Lynn @ Sa 1.03.2008, 19:26) Warum das Herz im Titel?
biggrin.gif


nun da gehts um ne herzensblutfrage. ich kenne selbst jemand der sich zZ daran die zähne ausbeisst. gleich mal den threadlink ihm posten tun... dem wird sicher nen stein vom herzen fallen
wink.gif
 
Hallo,

tolles Forum hier.

Ich bin durch Google hier.

Mein:

<?php
$sql = mysql_query(" SELECT datensatz FROM tabelle ORDER BY RAND() LIMIT 1 ");
while($row = mysql_fetch_object($sql))
{
echo "$row->datensatz";
}

Geht auch, nur möchte ich gerne das sich nicht bei jeden aufruf eine neue sortierung kommt. So zu sagen nur einmal am Tag eine "ORDER BY RAND"
 
gib rand() das tagesdatum (nur zahlen) als seed mit: CODE $sql = mysql_query(" SELECT datensatz FROM tabelle ORDER BY RAND(". date("Ymd") .") LIMIT 1 ");


gibt jeden tag ein anderen zufälligen datensatz aus.
 
Danke für deine Antwort Wurzel,

Gibt: CODE ORDER BY RAND(". date("Ymd") .")
automatisch das Datum mit? habe das und auch
CODE ORDER BY RAND(20130404)
versucht. Jetzt bleib die Ausgabe gleich. mal schauen was nach 24 Uhr ist.
Wobei ich 2 Seiten habe die auf die selben Tabellen zugreifen. Jetzt steht auf beiden Seiten das Selbe. Sollte aber unterschiedlich sein.
sad.gif
 
warum? wenn du auf denselben datenbestand mit dem selben seed zugreifst, bekommst du dasselbe ergebnis. wäre ja sonst sinnlos. addiere auf einer seite eine 1 hinzu und du bekommst unterschiedliche ergebnisse.

übrigens, das hier CODE ORDER BY RAND(20130404)
liefert auch morgen dasselbe ergebnis wie heute.

am besten liest du bezgl. rand() mal im mysql-manual und bezgl. date() das php-manual, dann kommt etwas klarheit in die sache.
 
Danke. Das mit MySQL ist schon echt eine heftige Sache wenn jahrelang nur HTML geschrieben hat. Ich möchte gerne den Tageswechsel noch zum testen nutzen. kannst du mir einen Qode geben der +1 ist?

CODE $abfrage = "SELECT * FROM datensatz ORDER BY RAND(". date("Ymd") .") LIMIT 1";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
echo $row->datensatz?> - <?php
}

So sieht meiner im moment aus.

Edit:
OK. Verstanden. Wenn die Zahl sich ändert, ändert sich auch die Ausgabe:

CODE ORDER BY RAND(20130403)


CODE ORDER BY RAND(20130404)

usw.

Wie Plus 1?
So?
CODE ORDER BY RAND(20130404+1)
 
Ich möchte hierzu auch zu bedenken geben, dass die gepostete Lösung mit rand() sehr performanceschwach bei großen Tabellen ist. Sofern man jeweils nur ein zufälliges Ergebnis braucht gibt es auch eine performantere Lösung, nämlich einfach einen Zufallswert zwischen min_id und max_id zu erzeugen und dann die nächstgrößere oder nächstkleinere id zu nehmen.

Wenn man alle Ergebnisse braucht gibts glaubich auch eine performantere Lösung, aber die habe ich gerade leider nicht zur Hand.
 
Hi Woki,

das die RAND lösung bei großen Datensätzen zu verlangsamung der Seitenaufrufen führt habe ich auch schon erlesen. Wobei ich nicht weiß was große Datensätze sind? Ich habe 2 Zeilen mit um die 300 Einträge. Auch mit dem Zusatz (". date("Ymdh") arbeitet das RAND ja auch nur einmal in der Stunde, bei (". date("Ymd") sogar nur einmal am Tag! Oder sehe ich das falsch?

Gruß
Fritz
 
Zurück
Oben