Zufälliger Eintrag aus Tabelle

Dieses Thema im Forum "Datenbanksysteme für das Web" wurde erstellt von martinibook, 14.03.2006.

  1. martinibook

    martinibook Thread Starter MacUser Mitglied

    Beiträge:
    8.564
    Zustimmungen:
    350
    MacUser seit:
    20.08.2005
    Hallo,
    Ich würde gerne einen zufälligen Eintag aus einer Tabelle haben. Wie muss ich dann den SQL Befehl gestalten?

    Martin
     
  2. ruerueka

    ruerueka MacUser Mitglied

    Beiträge:
    1.001
    Zustimmungen:
    66
    MacUser seit:
    04.04.2004
    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
     
  3. martinibook

    martinibook Thread Starter MacUser Mitglied

    Beiträge:
    8.564
    Zustimmungen:
    350
    MacUser seit:
    20.08.2005
    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
     
  4. ruerueka

    ruerueka MacUser Mitglied

    Beiträge:
    1.001
    Zustimmungen:
    66
    MacUser seit:
    04.04.2004
    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.
     
  5. martinibook

    martinibook Thread Starter MacUser Mitglied

    Beiträge:
    8.564
    Zustimmungen:
    350
    MacUser seit:
    20.08.2005
    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
     
  6. ruerueka

    ruerueka MacUser Mitglied

    Beiträge:
    1.001
    Zustimmungen:
    66
    MacUser seit:
    04.04.2004
    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.
     
  7. martinibook

    martinibook Thread Starter MacUser Mitglied

    Beiträge:
    8.564
    Zustimmungen:
    350
    MacUser seit:
    20.08.2005
    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
     
Die Seite wird geladen...