2009-03-02 9 views
10

Chciałbym dołączyć do mojego zbioru kolumnę, która będzie losową liczbą z listy sekwencyjnej = do liczby wierszy.Zapytanie MySQL do przypisania unikatowej liczby losowej do każdego wiersza.

Tak więc, jeśli mój stół miał 999 wierszy, potem numerami od 1 do 999 byłoby przypisane losowo i wyjątkowo.

Teraz pomyślałem, że mogę dodać manekina TempRandomColumn = Rand(), posortuj według tego i dodaj numery sekwencyjnie za pomocą PHP. Ale to oznacza 999 instrukcji MySQL.

Czy można to zrobić za pomocą pojedynczego wyciągu MySQL?

Dzięki za wszelkie wskazówki.

Odpowiedz

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

można naprawdę zamówienie przez rand? Wydaje mi się to dziwne, bo czy to nie oznacza, że ​​musiałby nazywać "randem" za każdym razem, gdy porównałby go do innego rzędu? –

+0

Najpierw wybiera RAND() s jako wartości tymczasowe wraz z normalnymi rekordami, a następnie sortuje te tymczasowe wartości. To jest tak samo jak SELECT * FROM (SELECT id, RAND() AS rnd FROM table) ZAMÓW RUNDĘ – Quassnoi

+0

fajnie! +1 dla "zen-ness" –

Powiązane problemy