sql >> Database >  >> RDS >> Mysql

Hoe een kolom in MySql te shufflen

Als je het niet erg vindt dat sommige tabelgegevens niet kunnen worden verwerkt (hangt af van de tafelgrootte, verwacht dat 50% rij niet kan worden verwerkt), hier is een oplossing:

Originele tabel

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

Vraag:

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

Resultaat (natuurlijk elke run verschillend)

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

Opmerking:u vindt de zoekopdracht mogelijk erg traag , dit komt omdat het twee keer aan tafel komt , dus als de gegevensgrootte 1000 is, moet deze 1000 * 1000 verwerken.

U kunt de snelheid van de zoekopdracht bepalen door ON new_meme.id <> original_meme.id te wijzigen naar ON new_meme.id BETWEEN original_meme.id - 5 AND original_meme.id +5 (de 5 kan veranderen), maar het zal de willekeur verminderen en werkte niet voor niet-numerieke id



  1. Waarom geeft deze lus niet elke vijf seconden een bijgewerkte objecttelling weer?

  2. SQL Oracle LEFT JOIN en SUBQUERY-fout:ORA-00905:ontbrekend trefwoord

  3. Ik heb de tabel general_log laten vallen, hoe kan ik deze opnieuw maken?

  4. MySQL 'Order By' - alfanumeriek correct sorteren