PHP MySQL abfrage zufall

hi,

ich habe eine frage zu php und mysql und weil ich nicht weiß wohin ich das schreiben soll (php oder mysql) lasse ich hier mal meinen link zum beitrag da damit ich kein doppelpost machen muss /t/php-mysql-abfrage-zufall/5244184

lg flo

Hey!

Ein fertiges Script hab ich jetzt nicht geschrieben - Doing by self ist eh immer am Besten! :wink:

Ich weiss nicht wie genau Du dich in der Materie auskennst, aber Du kannst alle Einträge deiner „Witzetabelle“ als Array ausgeben lassen, und dann mit shuffle() (siehe http://de2.php.net/manual/de/function.shuffle.php) die Elemente mischen. Dann kannst Du zB das 0te Element ausgeben. Dies wäre dann ein Zufälliger Eintrag.

Hoffe es ist ein für Dich brauchbarer Ansatz.

Vielleicht gibt es einen änlichen Befehl auch schon direkt in MySQL, dieser ist mir jedoch dann nicht bekannt.

Gruß,
Timo R.

anderer Ansatz…

Ein fertiges Script hab ich jetzt nicht geschrieben - Doing by
self ist eh immer am Besten! :wink:

richtig!

Ich weiss nicht wie genau Du dich in der Materie auskennst,
aber Du kannst alle Einträge deiner „Witzetabelle“ als Array
ausgeben lassen,

was bei einer sehr umfangreichen Witzetabelle aber ein wenig viel Speicher fressen dürfte und damit nicht wirklich performant wäre.
Deswegen mein Vorschlag: entweder mit einer id arbeiten und deren maximum zurückgeben lassen oder einfach die anzahl der Einträge zurückgeben lassen (count) und mit rand dann eine Zufallszahl bilden und mit einer „LIMIT $rand 1“ Abfrage nur einen Datensatz aus der Tabelle holen.

Grüße
Munich

Hallo

Deswegen mein Vorschlag: entweder mit einer id arbeiten und
deren maximum zurückgeben lassen oder einfach die anzahl der
Einträge zurückgeben lassen (count) und mit rand dann eine
Zufallszahl bilden und mit einer „LIMIT $rand 1“ Abfrage nur
einen Datensatz aus der Tabelle holen.

Was man auch mit einer Abfrage machen könnte:

SELECT * FROM tabelle LIMIT (SELECT COUNT(*) FROM tabelle) 1;

Mit der größten id würd ich nicht arbeiten, denn wenn du da mal einen Witz (warum auch immer) rauslöschst, stimmen Anzahl der Witze und größte id nicht mehr überein.

Gruß Johannes

SELECT * FROM Tabellenname ORDER BY RAND() LIMIT 1

Aber ACHTUNG: Nur für kleine Tabellen nutzen, da die Query sehr langsam ist. Für große Tabellen könnte ich dir ne andere optimierte Query anbieten.

wenn du das kannst, warum schreibst du dann erst eine schlechte loesung?

es ist doch keine schlechte Lösung. Für kleine Tabelle ist es eine einfache gute Lösung (die die Mysql-Standards nutzt und die jeder versteht).

Manchmal will man nicht immer gleich die perfekte Lösung haben, um zum Ziel zu kommen - auch wenn es schön wäre, aber dann wäre das IPhone erst dieses Jahr erschienen :wink: