【问题标题】:PHP MySQL select random rows where a row is differentPHP MySQL选择行不同的随机行
【发布时间】:2015-09-15 16:02:36
【问题描述】:

我想要实现的是随机选择多行,其中某一列与最后一列不同,例如

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

【问题讨论】:

  • 这不是随机的。那是不同的
  • 但我想随机选择大约 95,000 条具有这些 ID 的记录

标签: php mysql random


【解决方案1】:

我的解决方案的主要问题可能是它

  1. 不适用

    您的mytable 中需要有一个主要的唯一 ID

      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。

我用我的一个数据库试了一下。应该适用于任何具有唯一 id 和一些随机其他列的表。

如果你追加 ORDER BY id ASC 也会对 id 进行排序。

【讨论】:

  • 谢谢这是完美的速度不是问题我有很多处理能力。
  • 我更新了查询并将限制移到了末尾。第一个版本可能输出少于 10 个不同的值。
猜你喜欢
  • 1970-01-01
  • 2014-06-05
  • 2019-08-17
  • 2010-11-19
  • 2011-09-26
  • 1970-01-01
  • 2020-10-14
  • 2014-03-18
  • 1970-01-01
相关资源
最近更新 更多