2009-03-02 78 views
10

Tôi muốn đính kèm một cột vào bảng của tôi sẽ là một số ngẫu nhiên từ danh sách tuần tự = với số hàng.Truy vấn MySQL để chỉ định một số ngẫu nhiên duy nhất cho mỗi hàng

Vì vậy, nếu bảng của tôi có 999 hàng, thì các số từ 1 đến 999 sẽ được gán ngẫu nhiên và độc đáo.

Bây giờ, tôi đã tìm ra rằng tôi có thể thêm một TempRandomColumn = Rand(), sắp xếp theo thứ tự đó và thêm các số theo tuần tự sử dụng PHP. Nhưng điều đó có nghĩa là 999 câu lệnh MySQL.

Có cách nào để thực hiện điều này bằng một câu lệnh MySQL đơn không?

Cảm ơn mọi con trỏ.

Trả lời

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

Bạn có thể thực sự đặt hàng bằng rand không? Điều đó có vẻ kỳ lạ đối với tôi, bởi vì điều đó không có nghĩa là nó sẽ phải gọi "rand" trên một hàng mỗi khi nó so sánh nó với một hàng khác? –

+0

Trước tiên, nó chọn RAND() s làm các giá trị tạm thời cùng với các bản ghi bình thường, sau đó sắp xếp các giá trị tạm thời này. Nó giống như SELECT * FROM (SELECT id, RAND() AS Rnd FROM table) ORDER BY rnd – Quassnoi

+0

cool! +1 cho "zen-ness" –

Các vấn đề liên quan