2009-03-02 26 views
10

Deseo adjuntar una columna a mi tabla que será un número aleatorio de una lista secuencial = al número de filas.Pregunta de MySQL para asignar un número aleatorio único a cada fila

Por lo tanto, si mi mesa tenía 999 filas, luego los números del 1 al 999 serían asignados al azar y de forma única.

Ahora, pensé que podría agregar un dummy TempRandomColumn = Rand(), ordenar por eso y agregar los números secuencialmente usando PHP. Pero eso significa 999 declaraciones MySQL.

¿Hay alguna manera de hacer esto usando una sola instrucción MySQL?

Gracias por cualquier apuntador.

Respuesta

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

Se puede realmente ordenado por Rand? Eso me parece extraño, porque ¿no significa eso que tendría que llamar "rand" en una fila cada vez que lo comparaba con otra fila? –

+0

Primero selecciona RAND() s como valores temporales junto con registros normales, luego ordena en estos valores temporales. Es lo mismo que SELECCIONAR * DESDE (ID SELECCIONAR, RAND() AS rnd FROM table) ORDEN POR rnd – Quassnoi

+0

¡genial! +1 para "zen-ness" –

Cuestiones relacionadas