我有一个表,我需要在其中查询9个返回,每个都需要每次都是随机顺序,除了TYPE X的一个值外,它们不能重复。问题是如果使用GROUP BY,它只返回8个结果,但我需要9个,其中2个结果具有相同的TYPE值。
到目前为止我一直使用的草稿查询是: “SELECT * FROM(SELECT * FROM ORDER BY RAND())R GROUP BY type;
//表删除,格式化不工作,图像安装
答案 0 :(得分:0)
如果你想从MySQL中的组中获取随机行,我认为最安全的方法是使用变量。这是订购:
select q.*
from (select q.*,
(@rn := if(@q = questionid, @rn + 1,
if(@q := questionid, 1, 1)
)
) as rn
from questions q cross join
(select @q := 0, @rn := 0) params
order by questionid, rand()
) q
然后,如果你知道你有8个问题,但你想从第二个问题得到2个:
where rn = 1 or (questionid = 2 and rn = 2)
或者,如果您希望9个随机问题尽可能不重叠:
order by rn
limit 9