我想要实现的是随机选择多行,其中某一列与最后一列不同
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
最佳答案
我的解决方案的主要问题可能是
- 慢
不适用
您的
mytable
中需要有一个主要的唯一IDSELECT * 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。
我用我的一个数据库尝试过。应该适用于任何具有唯一 ID 和一些随机其他列的表。
如果您附加 ORDER BY id ASC
也会对 ID 进行排序。
关于PHP MySQL 选择随机行,其中行不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32590671/