【问题标题】:How to order data randomly如何随机排序数据
【发布时间】:2009-12-05 08:46:32
【问题描述】:

我有以下 MySQL。我想按随机顺序拉取数据。

谁能教我怎么做。

$Q = $this->db->query('SELECT P.*, C.Name AS CatName
               FROM products AS P
               LEFT JOIN categories C
               ON C.id = P.category_id
               WHERE C.Name = "Front bottom"
               AND p.status = "active"
               ');

【问题讨论】:

    标签: mysql random


    【解决方案1】:
    $Q = $this->db->query('SELECT P.*, C.Name AS CatName 
                       FROM products AS P
                       LEFT JOIN categories C
                       ON C.id = P.category_id
                       WHERE C.Name = "Front bottom"
                       AND p.status = "active"
                       ORDER BY RAND()
                       ');
    

    您可以使用 MySQL 的 RAND 函数来执行此操作,请注意,它在庞大的数据集(约 10k)上执行非常缓慢。 MySQL 会为表的每一行提取一个随机数,如果表很大,这可能会导致问题。

    更安全的方法是执行SELECT count(*) as n FROM table 并获取一个随机数并使用LIMIT 1,n 进行查询以获取第n 行。如果您只需要 1,或者您不关心结果的顺序相同,那将起作用。

    如果你真的需要一个完整的随机集,我认为最好在服务器端进行。

    【讨论】:

      【解决方案2】:

      你可以试试

      ORDER BY RAND()
      

      【讨论】:

        【解决方案3】:

        最简单的方法是使用ORDER BY RAND(),但它的性能很差,尤其是对于较大的数据集(所有匹配的行都需要一个随机数)。

        另一种方法是随机创建 ID(在您的代码中或再次使用 RAND():WHERE id in (RAND(), RAND(), RAND(), RAND()) 应该可以工作,但不能保证)。一旦某些 ID 不存在,就会出现问题。

        这是interesting article on the topic

        【讨论】:

          猜你喜欢
          • 2015-03-04
          • 1970-01-01
          • 1970-01-01
          • 2017-09-08
          • 2016-08-15
          • 1970-01-01
          • 2012-12-04
          • 2013-11-22
          • 2011-12-21
          相关资源
          最近更新 更多