2009-03-02 7 views
10

Je souhaite attacher une colonne à ma table qui sera un nombre aléatoire d'une liste séquentielle = au nombre de rangées.Requête MySQL pour assigner un nombre aléatoire unique à chaque ligne

Donc, si ma table avait 999 lignes, puis les numéros 1 à 999 seraient répartis de façon aléatoire et unique.

Maintenant, j'ai pensé que je pourrais ajouter un mannequin TempRandomColumn = Rand(), trier par cela et ajouter les nombres séquentiellement en utilisant PHP. Mais cela signifie 999 déclarations MySQL.

Existe-t-il un moyen de le faire en utilisant une seule instruction MySQL?

Merci pour les pointeurs.

Répondre

22
SET @r := 0; 
UPDATE items2 
SET  author_id = (@r := @r + 1) 
ORDER BY 
     RAND() 
+0

Pouvez-vous vraiment commande par rand? Cela me semble bizarre, parce que ça ne veut pas dire qu'il devrait appeler "rand" sur une rangée chaque fois qu'il le comparait à une autre rangée? –

+0

Il sélectionne d'abord RAND() s comme valeurs temporaires avec des enregistrements normaux, puis trie sur ces valeurs temporaires. C'est la même chose que SELECT * FROM (SELECT ID, RAND() AS rnd Table FROM) ORDER BY rnd – Quassnoi

+0

cool! +1 pour "zen-ness" –

Questions connexes