如果我有一个包含 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/