2009-03-02 7 views
10

Desidero collegare una colonna alla mia tabella che sarà un numero casuale da una lista sequenziale = al numero di righe.Query MySQL per assegnare un numero casuale univoco a ciascuna riga

Quindi, se il mio tavolo aveva 999 righe, poi i numeri da 1 a 999 sarebbero stati assegnati in modo casuale ed unicamente.

Ora, ho pensato che potevo aggiungere un dummy TempRandomColumn = Rand(), ordinarlo e aggiungere i numeri in sequenza usando PHP. Ma ciò significa 999 istruzioni MySQL.

C'è un modo per farlo utilizzando una singola istruzione MySQL?

Grazie per eventuali suggerimenti.

risposta

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

può davvero dell'ordine da Rand? Mi sembra strano, perché non significa che dovrebbe chiamare "rand" di fila ogni volta che lo confronta con un'altra riga? –

+0

Seleziona innanzitutto RAND() come valori temporanei insieme ai record normali, quindi ordina questi valori temporanei. È uguale a SELECT * FROM (ID SELECT, RAND() AS rnd FROM table) ORDER BY rnd – Quassnoi

+0

cool! +1 per "zen-ness" –

Problemi correlati