Sortierung

crashx

Erfahrenes Mitglied
@reptiler

wie gewünscht noch eine frage ;-)

wieso geht das nicht?

PHP:
$abfrage = "SELECT * FROM auto WHERE schnp = 1 ORDER BY RAND() LIMIT 1";

Also ich möchte das es mir alles wählt aber nur das wo die zelle "schnp" den wert 1 hat.
und ORDER..... das es nicht fix ist welcher eintrag es mir anzeigt
und LIMIT 1, das es mir aus den ausgewählten nur eine anzeigt, der aber sich bei refresh wechselt, also bei neuem seiten aufruf.

thx für eure Hilfe
 
Bei jeder Abfrage liefert die RAND()-Funktion einen anderen zufälligen Wert. Daher wird bei jedem Aufruf ein anderer Datensatz ausgewählt.
 
Falls du eine zeitabhängige Zufälligkeit haben möchtest, musst der RAND()-Funktion ein zeitabhängiger Parameter übergeben werden. RAND(FLOOR(UNIX_TIMESTAMP()/60)) würde beispielsweise eine minutliche Zufallszahl zurückgeben.
 
Falls du eine zeitabhängige Zufälligkeit haben möchtest, musst der RAND()-Funktion ein zeitabhängiger Parameter übergeben werden. RAND(FLOOR(UNIX_TIMESTAMP()/60)) würde beispielsweise eine minutliche Zufallszahl zurückgeben.

@Gumbo, wie ist das MySQL Query
RAND(FLOOR(UNIX_TIMESTAMP()/60))
genau zu verstehen, wenn ich es so schreibe in meine Abfrage wird es bei jedem Neuladen der Seite zufällig ausgegeben müsste es aber nicht so funktionieren, dass wenn ich diese Erweitung an das normale RAND() anhänge erst nach Ablaufen der eingestellten Zeit wieder zufällige Ausgaben möglich sind?

Also wenn ich 120 eingebe dann müsste doch das Rand erst wieder nach 120 Sekunden aktiv werden und während dieser Zeit dürfte nichts neues zufällig ausgegeben werden dürfen bei Neuladen, oder?
 
Die RAND()-Funktion ohne Parameter gibt eine Zufallszahl (Gleitkommawert) im Bereich von 0 bis 1.0 zurück. Wird ein Parameter angegeben, wird dieser als Ausgangswert benutzt, wobei beispielsweise RAND(0) i?m?m?e?r 0.15522042769494 ergibt. Und da das FLOOR(UNIX_TIMESTAMP()/60)-Konstrukt nur alle 60 Sekunden einen neuen Ganzzahlwert liefert, ist auch der Zufallswert nur alle 60 Sekunden anders.
 
Das würde ja auch genau das beudeten was ich angenommen hatte, und zwar das das FLOOR(UNIX_TIMESTAMP()/60)-Konstrukt nur alle 60 Sekunden eine neue Ausgabe bei der Rand Funktion erzielen sollte, jedoch haben meine Test gezeigt, dass drotzdem beim jedem Neuladen der Seite neue Zufallswerte ausgegeben werden?

Kanz du das erklären?
 
son gohan, scheinbar machst du irgendetwas falsch.

Mit mysql 4.1.14-nt kann ich folgendes reproduzieren:
Code:
mysql> SELECT RAND(FLOOR(UNIX_TIMESTAMP()/60));
+----------------------------------+
| RAND(FLOOR(UNIX_TIMESTAMP()/60)) |
+----------------------------------+
|                 0.71404792993706 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> SELECT RAND(FLOOR(UNIX_TIMESTAMP()/60));
+----------------------------------+
| RAND(FLOOR(UNIX_TIMESTAMP()/60)) |
+----------------------------------+
|                 0.71404792993706 |
+----------------------------------+
1 row in set (0.00 sec)

1 Minute später…

mysql> SELECT RAND(FLOOR(UNIX_TIMESTAMP()/60));
+----------------------------------+
| RAND(FLOOR(UNIX_TIMESTAMP()/60)) |
+----------------------------------+
|                 0.96423103936411 |
+----------------------------------+
1 row in set (0.00 sec)

mysql> SELECT RAND(FLOOR(UNIX_TIMESTAMP()/60));
+----------------------------------+
| RAND(FLOOR(UNIX_TIMESTAMP()/60)) |
+----------------------------------+
|                 0.96423103936411 |
+----------------------------------+
1 row in set (0.00 sec)
 
Hallo, muss mich korrigieren, jetzt wo ich das ganze etwas besser verstehe habe ich auch gemerkt das es funktioniert.

Ein brauchbare Funktion.

Weis noch jemand die höchstmögliche Sekundenzahl die man eingeben darf?
 
Zurück