Matti Mäkitalo: Zufalls-Datensatz nicht zufällig

Beitrag lesen

Hi,

in MySQL selektiere ich Datensätze und möchte aus dieser Menge zufällig einen auslesen.

SELECT

ort1.id      ORT
...
FROM   daten trm1
      ,orte ort1
WHERE  trm1.owner_id  = 1
AND    trm1.emb_object IS NOT NULL
AND    trm1.emb_object > ' '
AND    trm1.intern_kz  = 0
AND    trm1.tag       >= CURDATE()
AND    ort1.id         = trm1.ort_id
ORDER BY RAND() LIMIT 1

  
Du wirst ggf. noch ein anderes Problem bekommen: deine Query ist potentiell recht langsam.  
Das liegt daran, dass du deine Ergebnismenge komplett berechnen musst, dann komplett (de-)sortieren um dann genau einen Datensatz zu selektieren.  
Wenn du weißt, dass keine Lücken in deinen IDs existieren, dann könntest du anhand einer Gleichverteilung darüber eine zufällige ID im Bereich {id\_min, ..., id\_max} selektieren und dann den kompletten Datensatz aus der DB abholen. Wenn es nur wenige Lücken gibt, dann könntest du beim Auftreffen einer Lücke einfach nochmal eine Zufallszahl ziehen, wenn es mehr Lücken werden, wird das aber auch langsam weil du dann viele misses bekommst.  
  
Gibt noch ein paar Möglichkeiten mehr (z.B. nur IDs selektieren, PHP's rand() verwenden und dann mit der ID den ganzen Datensatz holen), aber man findet dazu einiges bei google.  
  
Bis die Tage,  
Matti

-- 
[Webapplikationen in C++ entwickeln](http://tntnet.org/)