0

在我的 SQL 中,我有一个带有列 id 和 Order 的表。在网站上的数据是根据 id 和 Order 显示的。但是我们想改变数据的显示方式,我们想随机化整个内容。任何人都可以建议 SQL 查询这个。

粗略的数据库结构如下

city_id       city_name       city_order
  1               xyz             1
  2               geh             2
  3               tre             3

问候,

4

3 回答 3

3

添加ORDER BY RAND()到查询的末尾

于 2013-10-11T18:26:47.000 回答
1

你会做这样的事情:

select city_id, city_name, city_order from table_name order by rand()

其中 table_name 是您的表的名称

于 2013-10-11T18:26:57.730 回答
-1

您可以ORDER BY RAND()像其他人建议的那样使用,但您也应该花点时间告别您的查询可能曾经拥有的任何表面上的效率和性能。这是因为您现在根据以下内容对结果集进行排序:

  1. 未编入索引。
  2. 动态生成。

MySQL [以及几乎任何其他 RDBMS] 显然不适合几乎任何需要引入随机性的操作。

更好的选择:

  1. 如果您的预期结果集足够小而不会导致:

    • 延迟取决于您的 Web 和数据库服务器之间所需的带宽。
    • 过多的内存使用存储结果集。

    然后简单地获取所有潜在的内容项并使用array_rand()orshuffle()来获取您的随机选择。

  2. 如果您预期的结果集足够大以至于您不想将整个内容传递给 PHP,那么我建议您这样做:

    $sql = 
    "SELECT COUNT(*) 'count'
    FROM content_table
    WHERE [your conditions]";
    
    $rs = $dbh->query($query);
    
    $random = rand(0,$rs['count']);
    
    $sql =
    "SELECT field1, field2, ...
    FROM content_table
    WHERE [your conditions]
    LIMIT $random, 1";
    
    $rs = $dbh->query($sql);
    

两者都将尊重您的索引。

于 2013-10-11T18:44:12.953 回答