我试图让脚本从一个表中随机选择一行,并继续搜索它是否存在于另一个表中。
代码可能会更好地解释它
do {
// get a random row from table A
$search = mysqli_query($db, 'SELECT * FROM `a` ORDER BY RAND() LIMIT 1');
// get the id
$row = mysqli_fetch_assoc($search);
$row_id = $row['id'];
// check table B to see if the row id exists
$check = mysqli_query($db, 'SELECT `id` FROM `b` WHERE `item` = "' . $row_id . '" LIMIT 1');
$result = mysqli_num_rows($check);
} while ($result === 1);
根据我的理解,它应该循环直到它找到一首存在于表 A 中但不存在于表 B 中的歌曲,然后继续,我可以使用 $row_id
。
现在这行得通了,但每隔一段时间它会返回表 B 中存在的一行
最佳答案
使用 LEFT JOIN
查询可以更轻松地找到 a
中不存在于 b
中的所有歌曲,然后选择 a从该列表中随机选择一个。另请注意,最好选择您实际需要的列,而不是使用 *
。根据您的代码,此查询应该有效:
SELECT a.id
FROM a
LEFT JOIN b ON b.item = a.id
WHERE b.id IS NULL
ORDER BY RAND()
LIMIT 1
然后您可以删除 do
循环并将其替换为这段代码。请注意,我添加了一项检查,以确保 a
中确实有一首歌曲在 b
中不存在:
$search = mysqli_query($db, 'SELECT a.id FROM a LEFT JOIN b ON b.item = a.id
WHERE b.id IS NULL ORDER BY RAND() LIMIT 1');
// get the id
$row;
if (!$row = mysqli_fetch_assoc($search)) {
echo "No non-matching songs found!"
$row_id = 0;
}
else {
$row_id = $row['id'];
}
关于php - Do...while 循环从数据库中获取随机行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53073285/