Zufälliger Eintrag aus Tabelle

martinibook

martinibook

Aktives Mitglied
Thread Starter
Dabei seit
20.08.2005
Beiträge
8.730
Reaktionspunkte
350
Hallo,
Ich würde gerne einen zufälligen Eintag aus einer Tabelle haben. Wie muss ich dann den SQL Befehl gestalten?

Martin
 
1) Was meinst du mit zufälliger Eintrag? Nur ein Feld oder eine ganze Reihe?
2) Welche Datenbank?
3) Welche Programmiersprache (du könntest ja zb einen select * auf die Tabelle machen und dann den Cursor per Zufallszahl auf eine Ergebnisreihe > 0 < Anzahl der Einträge setzen
 
Oh, ich denke immer, es gibt keine anderen Sprachen und DBs... lol
Also:
MySQL 5 über PHP (mysql_query)

Problem ander deiner Idee ist, dass ja auch mal eine ID durch löschen fehlen könnte.

Martin
 
martinibook schrieb:
Problem ander deiner Idee ist, dass ja auch mal eine ID durch löschen fehlen könnte.
Martin
Ne, das hast du falsch verstanden. Ichmeinte nicht ID, ich meinte wrklich den row count im Resultset.
Beispiel: Du machst ne query und bekommst 100 Datensätze zurück (kann dir vielleicht der Treiber liefern, ich kenn mich mit php odbc etc nicht aus - es gibt also doch andere Sprachen ;-) , dann rufst du die random - Funktion deiner Sprache auf und übergibst ihr als untere Grenze 0 und als obere Grenze den row count. dann machst du nen setRow( zufallszahl ) auf dem result set.
Mit Java / JDBC geht das prima. Aber das kann man sicher auch mit anderen sprachen bauen.

ach ja: mysql spezifisch kannst du eine aus random( 0, count(*) ) ermittelte zufallszahl natürlich gleich in die query bauen, etwa so:
SELECT * FROM BLA LIMIT 5, 1

wobei 5 die Zufallszahl wäre.
 
Gibt es denn nichts wie:
SELECT * FROM tabelle ORDER BY random LIMIT 1
Das fände ich am einfachsten und wahrscheinlich ist auch am schnellsten.

Martin
 
martinibook schrieb:
Gibt es denn nichts wie:
SELECT * FROM tabelle ORDER BY random LIMIT 1
Das fände ich am einfachsten und wahrscheinlich ist auch am schnellsten.

Martin
Wenn schon, dann so:
Code:
 SELECT * FROM TABELLE ORDER BY rand( ) LIMIT 1

ABER das macht was anderes (logischerweise):
es werden die ersten n Einträge gezogen (n=LIMIT, also hier 1) und dann zufällig sortiert. Lass es mal mit Limit 5 laufen, dann siehst du, was ich meine.
Die Funktion rand() in der Spaltenliste auszugeben hab ich nicht geschafft, kann aber an meiner mysql version liegen (3.23).
Ein subselect iin der limit clause geht auch nicht...

Hier gibts nen Fred dazu:
http://www.mediengestalter.info/forum/10/php-mysql-daten-aus-db-per-zufall-auslesen-42840-1.html
Da es ne mysql Frage ist, bist du da besser aufgehoben.
 
ruerueka schrieb:
ABER das macht was anderes (logischerweise):
es werden die ersten n Einträge gezogen (n=LIMIT, also hier 1) und dann zufällig sortiert. Lass es mal mit Limit 5 laufen, dann siehst du, was ich meine.
Ich meine, der Sortiert erst und dann das Limit, wie bei iTunes Listen. Ich habe einen MySQL-Vokabeltrainer der nach richtig_abfragen/gesammt_abfragen sortiert, mit Limit 1. Das klappt prima, ich werde immer die schlechteste gefragt :)

Martin
 
Zurück
Oben Unten