Discussion:
fast zufällige Auswahl
(zu alt für eine Antwort)
Fabian Knauf
2010-05-04 15:00:18 UTC
Permalink
Hallo,

derzeit hole ich mir aus einer Tabelle 8 zufällige Datensätze mit
SELECT id, wert FROM referenzen ORDER BY RAND() LIMIT 8

Jetzt soll es aber so sein, dass 4 Werte immer dabei sein sollen und nur
4 weitere zufällig gewählt werden sollen. Die Anzeige soll dann aber wie
gehabt zufällig bleiben, also die 4 fixen können an beliebiger Stelle
auftauchen

Gibt es dafür eine elegenate Lösung, oder muss ich zwei SELECTS machen
und die beiden Ergebnisse zusmamen in ein Array packen und dann daraus
in zufälliger Reihenfolge auswählen?

Gruß
Fabian
Niels Braczek
2010-05-04 17:51:12 UTC
Permalink
Post by Fabian Knauf
derzeit hole ich mir aus einer Tabelle 8 zufällige Datensätze mit
SELECT id, wert FROM referenzen ORDER BY RAND() LIMIT 8
Jetzt soll es aber so sein, dass 4 Werte immer dabei sein sollen und nur
4 weitere zufällig gewählt werden sollen. Die Anzeige soll dann aber wie
gehabt zufällig bleiben, also die 4 fixen können an beliebiger Stelle
auftauchen
Hab's jetzt nicht getestet, daher nur als Ansatz:

SELECT id, wert, CASE WHEN id IN (1,2,3,4) THEN 1 ELSE 0 AS must_include
FROM referenzen
ORDER BY must_inlude DESC, RAND()
LIMIT 0,8

Allerdings wäre deine Frage in de.comp.datenbanken.mysql besser
aufgehoben gewesen.

MfG
Niels
--
| http://www.kolleg.de · Das Portal der Kollegs in Deutschland |
| http://www.bsds.de · BSDS Braczek Software- und DatenSysteme |
| Webdesign · Webhosting · e-Commerce · Joomla! Content Management |
------------------------------------------------------------------
Kristian Köhntopp
2010-05-06 15:33:31 UTC
Permalink
Post by Fabian Knauf
derzeit hole ich mir aus einer Tabelle 8 zufällige Datensätze mit
SELECT id, wert FROM referenzen ORDER BY RAND() LIMIT 8
http://jan.kneschke.de/projects/mysql/order-by-rand/
Post by Fabian Knauf
Jetzt soll es aber so sein, dass 4 Werte immer dabei sein sollen und nur
4 weitere zufällig gewählt werden sollen. Die Anzeige soll dann aber wie
gehabt zufällig bleiben, also die 4 fixen können an beliebiger Stelle
auftauchen
Du kannst UNION bzw. UNION ALL verwenden, und dann ein ORDER BY auf
diese Vereinigungsmenge anwenden.
Post by Fabian Knauf
Gibt es dafür eine elegenate Lösung, oder muss ich zwei SELECTS machen
und die beiden Ergebnisse zusmamen in ein Array packen und dann daraus
in zufälliger Reihenfolge auswählen?
Für eine entsprechend große Basistabelle ist das unter Umständen der
schnellere Ansatz.

Kris

Lesen Sie weiter auf narkive:
Loading...