php - 从包含已删除记录的表中选择随机行

标签 php mysql

如果我有一个包含 ID 为 1、3、5 的 3 行的表,因为 ID 为 2 和 4 的行已被删除,我如何确保选择了一个存在的行?

$stmt = $db->prepare("SELECT COUNT(*) FROM table");
$stmt->execute();
$stmt->bind_result($numRows);
$stmt->fetch();
$stmt->close();

$random = mt_rand(1,$numRows);

$stmt = $db->prepare("SELECT link FROM table WHERE id=$random");

这永远不会选择 ID 为 5 的行,并且还会选择一个不存在的行 (2)。

最佳答案

如果行数很少(并且您确定它会保持这种状态),您可以使用 ORDER BY RAND() (请注意,这会导致大表出现性能问题)。

另一种方法是先计算有多少行

SELECT COUNT(*) AS total FROM table;

然后选择一个随机数

$rand = rand(1, $total);

然后选择有限制的行

SELECT * FROM table LIMIT $rand, 1;

关于php - 从包含已删除记录的表中选择随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35127944/

相关文章:

php - Laravel - 停止并发访问记录

php - 为什么我无法正确回显所有变量?

mysql - 尝试执行查询时 SQL 语法错误

mysql - 我无法从具有外部连接的 View 进行更新

php - 使用数组选择多行,然后插入到另一个语句

PHP HTTP POST 问题 - 如何将来自多个表单的数据作为 HTTP Post 传递?

php - mysql检查其他日期范围中的日期范围

php上传文件唯一名称问题

php - 将值从 MySql 下拉列表传递到另一个下拉列表,而不在 Db-php 上发布

php - 具有多个 ands 和 ors 的 Mysql 查询