zufällige ausgabe von bildern

macropode

Erfahrenes Mitglied
eine frage wie kann ich zufällige datensätze aus einer datenbank auslesen?

z.B. habe ich eine DB wo ca 200 datensätze (links zu anderen seiten) gespeichert sind.
nun möchte ich immer 5 links per zufall auslesen und diese auf meiner index.php im rechten frame darstellen.
Dies soll sich ca alle 120 sek wiederholen!
 
Code:
SELECT *
FROM Tabelle
ORDER BY RAND()
LIMIT 5
Für reproduzierbare Ergebnisse kannst Du rand auch einen Seed-Wert übergeben.

Gruß hpvw
 
Ja, das würde mich auch mal brenned interisieren.

Also den ersten Teil habe ich hinbekommen, wie schaft man es jetzt aber das sich alle 120 sek. die links neu ändern?
 
Das kannst Du über den Seed-Wert lösen.
Du mußt also eine Formel finden, die alle 120 Sekunden ein anderes Ergebnis liefert. Da liegt es doch nahe, die aktuelle Uhrzeit in Sekunden umzuwandeln (z.B. als Unix-Timestamp) und durch 120 zu Teilen. Das Ergebnis wird dann gerundet:
Code:
...
ORDER BY RAND(FLOOR(UNIX_TIMESTAMP(NOW())/120))
...
Gruß hpvw
 
gut danke hätte ich auch selber drauf kommen können. was ist eigentlich mit dieser abfrege wenn z.b. nur 3 datensätze in der db sind?
brauche ich nämlich auch noch für eine andere abfrage!

Meinem verständnis zu folge müßte ich das extra abfangen!
 
Nein, das mußt Du nicht extra abfangen. Du beschränkst mit der Abfrage das Ergebnis auf maximal 5 Zeilen. Gibt es in der Tabelle weniger Zeilen, werden auch nur diese in das Ergebnis aufgenommen.

Je nach dem, wie Du die Darstellung machst, müßtest Du aber eventuell Platzhalter für nicht vorhandene Ergebniszeilen ausgeben. Zum Beispiel müßte man ggf. bei einer Gallerie in einem Tabellenlayout leere Zellen einfügen, um die Tabelle zu vervollständigen. Bei Links sehe ich jedoch kein Problem, einfach ein paar Links weniger auszugeben.

Gruß hpvw
 
@hpvw, hi ich bekomme es einfach nicht hin das das MySQL Srit alle 120 Sekunden die Ausgabe per Rand wechselt. Kannst du mir bitte sagen was an meinem folgenden Script dazu nicht stimmt:

<?php
$res = mysql_db_query("DB68640", "SELECT `name`, `url` FROM `links` ORDER BY RAND(FLOOR(UNIX_TIMESTAMP(NOW())/120)) LIMIT 5");
$num = mysql_num_rows($res);

echo "<p class=\"frage_1\">Weiterf&uuml;hrende Themen</p>
<ul class=\"frage\">";

for ($i=0; $i<$num; $i++)
{
$vn = mysql_result($res, $i, "url");
$nn = mysql_result($res, $i, "name");

echo "<li><a href=\"$vn\">$nn <img class=\"wft_bild\" src=\"gif/schrift.gif\" alt=\"$nn\" title=\"$nn\" /></a></li>\n";
}

echo "</ul>";

mysql_close($db);
?>

Also das Script läuft ganz gut ohne die Abfrage ORDER BY RAND(FLOOR(UNIX_TIMESTAMP(NOW())/120)) , aber wenn ich es einfüge passiert auch nach der Zeit nichts, da ich mich auch nicht mit der Umrechnung auskenne kann ich jetzt auch leider kein Beispiel für 2 Sekunden Ablaufzeit posten, aber vielleicht kannst du das ja machen? Wäre echt tolle wenn das ganze noch klapt.
 
Um nach 2 Sekunden statt nach 120 Sekunden zu wechseln, mußt Du aus der 120 eine 2 machen.
Ich habe die zufällige Ordnung, die nach x Sekunden ein anderes Ergebnis liefert, an einer Testtabelle mit einem Intervall von 10 Sekunden, erfolgreich getestet. Die ORDER-BY-Syntax entspricht genau Deiner geposteten Formel, nur, dass ich aus der 120 eine 10 gemacht habe.
Da ich nur wenig Daten in der Tabelle habe, habe ich das LIMIT auf 2 gesenkt. Es kamen ca. 10 Sekunden lang gleiche Ergebnisse und dann wieder andere.

Entweder hast Du beim Einfügen einen Syntaxfehler (z.B. Klammerung) eingebaut (Meinst Du mit "passiert nichts", dass es kein Ergebnis gibt?) oder die Seite kommt noch aus dem Browser-Cache (Meinst Du mit "passiert nichts", dass es das gleiche Ergebnis, wie vorher, ist?). Es gibt sicherlich noch andere Möglichkeiten, aber die fallen mir gerade nicht ein.

Gruß hpvw
 
Hallo hpvw, damit wir nicht an einander vorbeireden erklär ich nochmal was ich mir vorgestellt hatte.

Ich will erreichen das sich automatisch alle 2 Sekunden die Ausgabe wechselt. Wenn ich die Seite manuell neu lade passiert das auch dank randrom Befehl im Script, aber mit diesem Timestap von MySQL habe ich gedacht das das jetzt automatisie werden könnte, sodass nach eingestellter Zeit jeweils die Ergebnisse der Abfrage per randrom gemischt ausgegeben werden.

Habe ich das so richtig verstanden mit dem Unixtimestap von MYSQL oder ist das was ich will damit überhaupt nicht möglich, und wenn nicht was hat dann das Beispiel von dir genau für ein Verhalten?
 
Zurück