我将如何使用 PHP 选择第 1、第 12、第 68 甚至第 651 条记录


How would I select the 1st, 12th, 68th or even 651st record with PHP?

>想象一下,我有一个MySQL数据库表,其中包含1,000条记录,我想随机选择1条记录。

记录没有 ID 列,其中数字每次上升 +1。ID 号是随机生成的,因此第一个记录 ID 可以是"932151540",第二个记录 ID 可以是"541577961"。

我能想到随机选择 1 条记录的唯一方法是找出总共有多少条记录。在 1 和数量之间选择一个随机数(假设随机数是 467(。然后获得第 467 条记录。

我将如何使用 PHP 执行此操作?

提前致谢:)

SELECT * FROM table ORDER BY RAND() LIMIT 1;
SELECT *
FROM TABLE
ORDER BY RAND()
LIMIT 1
您可以使用

的替代查询是

SELECT * FROM myTable WHERE RAND()<(SELECT ((1/COUNT(*))*10) FROM myTable) ORDER BY RAND() LIMIT 1;随着表大小的增加,这将产生更好的性能。

引用作者的话:

此方法使用 ORDER BY RAND((,但只在一小部分 表格行;此百分比基于您想要的行数, 限制 1,除以表的行数,COUNT(*(,然后 将该数字乘以 10 以避免返回的行数少于您 请求。我在阅读后开发了这种方法 如何选择随机 MySQL 中的行 @ rndblog.com。

在此处阅读完整帖子,以获取详细说明和性能分析,以及其他可能不适用于您的情况的替代方案。

我使用它而不是慢速的 ORDER BY rand((,相当快。

$table = "mytable";
$offset_result = mysql_query("SELECT FLOOR(RAND() * COUNT(*)) AS offset FROM ".$table.";");
$offset_row = mysql_fetch_object($offset_result);
$offset = $offset_row->offset;
$result = mysql_query("SELECT * FROM ".$table." LIMIT ".$offset.", 1;"); 
$result_row = mysql_fetch_row($result);  // point to record
$row = $result_row[0];