从mysql数据库中提取5条随机记录[关闭]

Posted

技术标签:

【中文标题】从mysql数据库中提取5条随机记录[关闭]【英文标题】:Pull 5 random records from mysql database [closed] 【发布时间】:2012-11-12 21:18:16 【问题描述】:

我正在尝试编写一个 php / mysql 脚本,该脚本将从数据库中提取 5 条随机记录并显示它们。目前,我正在使用以下方法将一条记录拉出并显示在一个模块中,但我不确定如何一次仅拉出 5 条。我将在数据库中总共有大约 200-300 条记录。

我目前正在使用以下代码随机拉出单条记录:

<?php
$result = mysql_query("SELECT * FROM `zgjzb_chronoforms_data_submitbusiness` ORDER BY     RAND() LIMIT 0,4;");
$row = mysql_fetch_array($result);
?>

【问题讨论】:

LIMIT 5。不要使用mysql_*,不要在大表上使用ORDER BY RAND 使用while循环,这在PHP manual中的许多示例中清楚地显示了 重复:***.com/questions/9945691/… @tereško - 这是重复的,但请注意三个答案中的两个(包括接受的答案)很糟糕。这个问题唯一好的答案是this one,但它需要一个存储过程。 @TedHopp ,是的,它需要一个存储过程,因为在 SQL 中快速选择 N unique 条目是一个不完全微不足道的问题。 【参考方案1】:

您不想使用ORDER BY RAND()。 MySQL 必须建立一个临时表。如果你的表有一个唯一的 id 列,这样的事情会更好:

SELECT * FROM `zgjzb_chronoforms_data_submitbusiness` 
WHERE id >= (SELECT FLOOR( MAX(id) * RAND()) FROM `table` )
ORDER BY id LIMIT 1;

请参阅this blog post 了解其他在 php 中运行良好的方法。

【讨论】:

终于有个不错的答案了。谢谢你 谢谢,这会拉出 5 条记录吗?还是我只是将 LIMIT 更改为 5 条? @IainSimpson - 它将拉出一条记录。您不想使用LIMIT 5,因为它会提取 5 个 连续 记录,这些记录并不是真正随机的。不过,它足够便宜,您可以重复多次,直到获得 5 条唯一记录。 @Dagon - 我也不打算对它进行基准测试。 :) 阻止你!我诱骗你的邪恶计划失败了! :-)

以上是关于从mysql数据库中提取5条随机记录[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

从mysql数据表中随机取出一条记录

mysql随机查询符合条件的几条记录

数据库取中间几条记录

我需要从 6 个随机记录中提取数据,但我遇到了一些麻烦 [重复]

按随机和字段排序 MySQL 查询?

如何从mssql随机取出一条记录,看似很简单的问题