Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да разбъркате колона в MySql

Ако нямате нищо против някои от данните в таблицата не могат да бъдат обработени (зависи от размера на таблицата, очаквайте 50% ред не може да бъде обработен), ето решение:

Оригинална таблица

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

Запитване:

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

Резултат (различен при всяко изпълнение, разбира се)

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

Забележка:Може да намерите заявката много бавна , това е защотото се присъединява към таблицата два пъти , така че ако размерът на данните е 1000, те ще трябва да обработят 1000 * 1000.

Можете да контролирате скоростта на заявката, като промените ON new_meme.id <> original_meme.id към ON new_meme.id BETWEEN original_meme.id - 5 AND original_meme.id +5 (5 може да се промени), но ще намали произволността и няма да работи за нецифрен идентификатор



  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 на nodejs, който поддържа съхранени процедури?

  2. FORMAT() Примери в MySQL

  3. Все пак да се ограничи времето за изпълнение на MySQL заявка?

  4. Как да използвам php да преброим масива от думи (низове) вмъкване в MySQL

  5. Моля, инсталирайте mysql адаптер 'gem install activerecord-mysql-adapter'