可能是有史以来最差的冠军。我所拥有的是一个3列的表
id | name | type
1 | John | 1
2 | Sam | 1
3 | Bob | 2
4 | Joe | 2
5 | Al | 3
6 | Paul | 3
我需要选择3个不同类型的随机人
有效输出
id | name | type
1 | John | 1
3 | Bob | 2
6 | Paul | 3
无效输出
id | name | type
3 | Bob | 2
5 | Al | 3
6 | Paul | 3
我认为我能做的是
SELECT id, name, type FROM table WHERE type = 1
UNION
SELECT id, name, type FROM table WHERE type = 2
UNION
SELECT id, name, type FROM table WHERE type = 3
但这实际上是不可能的,因为这只是一个简化的例子,在实际代码中我有更多的列来选择和执行连接,如果我这样做,那将是非常难以维护的。有什么建议吗?
答案 0 :(得分:1)
这是一个使用变量的方法。据推测,您需要每种类型的随机记录:
select id, name, type
from (select t.*,
(@rn := if(@t = type, @rn + 1,
if(@t := type, 1, 1)
)
) as seqnum
from table t cross join
(select @t := 0, @rn := 0) vars
order by type, rand()
) t
where seqnum = 1;
答案 1 :(得分:1)
为什么不尝试使用group by。
select id,name,type from table group by type order by rand() limit 0,XXX