2009-03-12 8 views
1

Ich muss Zeilen aus einer Tabelle (d. H. "Bestellungen") nach dem Zufallsprinzip sortiert nach einer Spalte (sagen wir "Benutzer") abrufen. Das heißt, ich brauche alle Bestellungen von demselben Benutzer, um zusammen zu bleiben (einer nach dem anderen) und die Benutzer, um zufällig geordnet zu werden.MySQL - Wie ordne ich die Ergebnisse zufällig in einer Spalte an?

Antwort

3

Ich gehe davon aus, Sie haben eine zweite Tabelle namens "Benutzer", die alle Benutzer darin hat. Wenn nicht, könnten Sie immer noch das tun, indem das Hinzufügen eines weiteren SELECT DISTINCT-Unterabfrage auf Aufträge, aber das wäre viel chaotischer sein:

SELECT orders.* 
FROM orders 
INNER JOIN (SELECT userid, RAND() as random FROM users) tmp 
ON orders.userid = tmp.userid 
ORDER BY tmp.random, tmp.userid 

Sie wollen durch die Zufallszahl und der Benutzer-ID, um zu bestellen, so, wenn zwei Benutzer-IDs bekommen die gleiche Zufallszahl ihre Bestellungen werden nicht alle zusammen durcheinander gebracht.

+0

Genau das, was ich gesucht habe. Danke vielmals! – Gerardo

+0

Dies funktioniert nicht in MS SQL Server. RAND() wertet eine Konstante aus und gibt jeder user_id den gleichen Wert für 'random' ... – MatBailie

+0

Gut, dass er MySQL dann benutzt :) –

0

Wie zufällig muss es sein? Ich kann mir ein paar mögliche Antworten vorstellen.

Wenn die "zufällige" Sequenz wiederholbar sein soll, können Sie nach einem Hash der Benutzer-ID sortieren, indem Sie MD5 verwenden oder einen benutzerdefinierten, den Sie selbst erstellen, z. ORDER BY MD5(), Sekundär_Speicher_Spalte.

0

umkehren von reverse (user)?

Verwandte Themen