我想要实现的是随机选择多行,其中某列与最后一列不同,例如
SELECT * FROM mytable WHERE `column_for_duplicate_values` != '$thelastkey' ORDER BY RAND() LIMIT 10
多个值的列将保持例如:
1 , 1 , 1 , 1 , 2, 5 , 6, 6 , 6 , 6 , 6 , 11 , 11 , 11 , 19
我想从每个中选择1。所以我会得到
1 , 2 , 5 , 6 , 11 , 19
答案 0 :(得分:2)
我的解决方案的主要问题可能是它的
不适用
您需要在mytable
SELECT * FROM mytable WHERE id IN (
SELECT id FROM (
SELECT id, column_for_duplicate_values
FROM mytable ORDER BY RAND()) AS rand
GROUP BY column_for_duplicate_values
ORDER BY RAND()) LIMIT 10;
主要概念是先获取所有值的随机列表,其中包含id和您想要具有唯一值的列。
从这个结果我们按照我们只想拥有一次的值进行分组,只返回id。然后主表将从此列表中选择10个随机ID。
我用我的一个db尝试过。应该使用任何具有唯一ID和一些随机其他列的表。
如果您追加ORDER BY id ASC
,也会对ID进行排序。