如何在MySQL中选择随机行?

Gow*_*wri 14 mysql

mytable

pid name field
=== ==== =====
1    A1   0
2    A2   1
3    A3   1
4    A4   0   
5    A5   0
Run Code Online (Sandbox Code Playgroud)

这是我的表结构.这里我想随机选择4行,所以我在查询中使用RAND()mysql函数我的问题是

如何配对行.我的意思是,我想选择pid 2和3总是另一个.我需要按照下面的顺序.我不想打破A2 A3对

A1 A2 A3 A4A2 A3 A4 A1A2 A3 A4 A5A4 A5 A2 A3和等

我使用下面的查询,但它不适合我

SELECT * FROM mytable ORDER BY RAND() ASC limit 0,4
Run Code Online (Sandbox Code Playgroud)

Mik*_*e S 11

turbod与他的答案很接近,他只是随机排序,当你想要通过pid订购时,在获得你想要的随机行以及A2和A3的那些:

(
    SELECT *
    FROM `mytable`
    WHERE 
        name ='A2' OR 
        name ='A3'
    LIMIT 2
)
UNION
(
    SELECT DISTINCT *
    FROM `mytable`
    WHERE 
        name !='A2' OR 
        name !='A3'
    ORDER BY RAND( ) LIMIT 2
) 
ORDER BY `pid`
Run Code Online (Sandbox Code Playgroud)


Iso*_*opp 6

通常,使用ORDER BY RAND()不是一个好主意.请阅读Jan Kneschke的文本,说明原因:http://jan.kneschke.de/projects/mysql/order-by-rand/