【问题标题】:Randomly Selecting Rows with MySQL使用 MySQL 随机选择行
【发布时间】:2009-10-04 22:01:31
【问题描述】:

从一张表中随机选择记录;我必须总是在 PHP 中设置一个临时变量吗?我需要一些帮助来选择 CodeIgniter 模型中的随机行,然后每次查看我的主页时在一个视图中显示三个不同的行。有没有人对如何解决这个问题有任何想法?提前致谢!

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    如果您没有大量行,您可以简单地:

    SELECT * FROM myTable ORDER BY RAND() LIMIT 3;
    

    如果您有很多行,这会变慢,但对于较小的数据集,它会正常工作。

    正如史蒂夫米歇尔在他的回答中提到的那样,这种方法对于大表可能会变得非常难看。他的建议是一个很好的起点。如果您知道表上的近似最大整数 PK,您可以执行一些操作,例如在 1 和最大 PK 值之间生成一个随机数,然后一次抓取一个随机行,例如:

    $q="SELECT * FROM table WHERE id >= {$myRandomValue}";
    $row = $db->fetchOne($q); //or whatever CI's interface to grab a single is like
    

    当然,如果您需要 3 个随机行,您将在此处进行三个查询,但由于它们完全在 PK 上,它们会很快(比随机化整个表要快)。

    【讨论】:

      【解决方案2】:

      我会这样做:

      SELECT * FROM table ORDER BY RAND() LIMIT 1;
      

      这会将数据按随机顺序排列,然后仅返回该随机顺序的第一行。

      【讨论】:

        【解决方案3】:

        我在生产中使用这段代码来获得随机报价。使用 MySQL 的 RAND 函数非常慢。即使数据库中有 100 条报价,我也注意到网站上的延迟时间。有了这个,完全没有滞后。

        $result = mysql_query('SELECT COUNT(*) FROM quotes');
        $count = mysql_fetch_row($result);
        $id = rand(1, $count[0]);
        $result = mysql_query("SELECT author, quote FROM quotes WHERE id=$id");
        

        【讨论】:

          【解决方案4】:

          您需要这样的查询:

          SELECT * 
          FROM tablename
          WHERE somefield='something'
          ORDER BY RAND() LIMIT 3
          

          取自第二个结果 http://www.google.com/search?q=mysql+random 它应该可以工作;)

          【讨论】:

            【解决方案5】:

            如果桌子很大,通过 rand() 订购一张大桌子可能会非常昂贵。 MySQL 需要建立一个临时表并对其进行排序。如果您有主键并且知道表中有多少行,请使用 LIMIT x,1 获取随机行,其中 x 是您想要获取的行数。

            【讨论】:

              猜你喜欢
              • 2011-09-26
              • 2019-01-25
              • 2010-11-19
              • 2011-04-16
              • 2015-07-09
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多