zufällige id auswählen



  • hallo,

    gibt es in sql eine funktion die mir eine zufällige id liefern kann?



  • endlich bin ich nun zu hause angekommen und habe des rätsels losung gefunden 🙂

    ...am einfachsten ist eine zufällige auswahl dadurch zu erreichen, dass alle datensätze mit SELECT ausgewählt werden und ORDER BY mit dem zusatz RAND() ausgeführt wird. dadurch wird die resultierende liste nach zufallszahlen sortiert. nun kann mit limit der erste datensatz ausgewählt werden...

    SELECT titleID FROM titles ORDER BY RAND() LIMIT 1
    

    quelle: php5 und mysql5, bernd kofler und bernd öggl



  • Wenn ich das aber richtig sehe ist das doch für große Tabellen sehr langsam weil SQL für jeden Datensatz erst RAND() ausführen muss, oder lieg ich da falsch?

    Gruß



  • nicht nur das der ausdruck ist nur für php+mysql
    und einer unser sitzt gerade vor ibm db2...

    ich habe im moment absolut keinen plan wie ich
    eine zufallszahl zwischen 1 und 1000000 bekommen soll.

    im befehlseditor klappt folgender ausdruck:

    SELECT accid FROM accounts order by rand() FETCH FIRST 1 ROWS ONLY;
    

    aber im c-quellcode (embedded-sql)

    exec sql SELECT accid into :ACCID FROM accounts order by rand() FETCH FIRST 1 ROWS ONLY;
    

    kommt eine seltsame fehler meldung:

    die sql-anweisung schlug auf grund eines nicht schwer wiegenden (nicht kritischen) systemfehlers fehl.
    nachfolgende sql anweisungen können verarbeitet werden.
    ursachencode: "can not enforced maxcard > 1". sqlstate=58004
    auf grund vorheriger fehler wurde kein paket erstellt
    vorkompilieren oder binden mit "2" fehler(n) und "0" warnung(en) beendet.
    


  • mit dem cursor konzept klappt das ganze,
    aber es ist unbeschreiblich langsam!!!

    ...stand der dinge: ich stehe wieder bei null



  • Warum nicht erst SELECT count(*) FROM table und dann (mit was auch immer du die Datenbank benutzt) darus eine Zufallszahl berechnen und diesen Datensatz abfragen: SELECT ... FROM table LIMIT zufallszahl, 1

    Gruß


Anmelden zum Antworten