Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Cách xáo trộn một cột trong MySql

Nếu bạn không phiền về một số dữ liệu bảng không thể xử lý được (tùy thuộc vào kích thước bảng, không thể xử lý hàng 50%), đây là giải pháp:

Bảng gốc

id  name
1   Some
2   Body
3   Once
4   Told
5   Me
6   The
7   World
8   Is
9   Gonna
10  Roll
11  Me
12  I 
13  Ain't
14  The 
15  Shapest
16  Tool
17  In
18  The
19  Shed
20  She
21  was
22  looking
23  kind
24  of
25  dumb
26  with
27  her
28  finger
29  and
30  her
31  thumb

Truy vấn:

SELECT new_id, name FROM (
    SELECT  new_id, name FROM (
        SELECT new_meme.id as new_id, original_meme.id as original_id, original_meme.name FROM meme original_meme
        JOIN meme new_meme ON new_meme.id <>  original_meme.id
        ORDER BY RAND()
    ) layer1
    GROUP BY layer1.new_id
) layer2 GROUP BY name

Kết quả (tất nhiên là khác nhau ở mỗi lần chạy)

1   I 
2   In
3   Gonna
4   Ain't
5   The
6   her
7   finger
8   Some
9   dumb
10  She
15  Me
16  with
17  Told
18  and
19  World
21  Roll
22  The 
25  Tool
26  Shed
27  Is
28  Me
29  Sharpest
31  The

Lưu ý:Bạn có thể thấy truy vấn rất chậm , điều này là do nó tham gia vào bảng hai lần , vì vậy nếu kích thước dữ liệu là 1000, nó sẽ cần phải xử lý 1000 * 1000.

Bạn có thể kiểm soát tốc độ của truy vấn bằng cách gắn thẻ ON new_meme.id <> original_meme.id thành ON new_meme.id BETWEEN original_meme.id - 5 AND original_meme.id +5 (5 có thể được thay đổi), nhưng nó sẽ làm giảm tính ngẫu nhiên và không hoạt động đối với id không phải số



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql chọn hàng khi giá trị cột thay đổi

  2. Lặp lại từ danh mục này sang danh mục phụ trong PHP

  3. xampp MySQL không khởi động

  4. Kiểm tra ngôn ngữ của chuỗi dựa trên glyphs trong PHP

  5. Có cách nào để chọn từ bảng MySQL nơi một trường kết thúc bằng ký tự / số nhất định không?