php - Do...while 循环从数据库中获取随机行

标签 php mysql database do-while

我试图让脚本从一个表中随机选择一行,并继续搜索它是否存在于另一个表中。

代码可能会更好地解释它

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/

相关文章:

php - 如何避免在mysql php中多次插入相同的记录

database - 快速从CSV对DB表进行数据同步

objective-c - sqlite_prepare_v2 不返回 SQLITE_OK

php - 使用 Yii 进行网站搜索

php - 嵌套mysql while循环未返回预期结果

php - 拉维尔 5.6 | PHP artisan 迁移不工作

php - 按平台选择和统计不同的活跃用户,并比较它们是否存在于其他表中

php - Codeigniter 如何在数组中使用 where OR、AND 子句

mysql - 错误 : There's not enough space in/var/lib/mysql/

php - 选择当前用户的所有好友id?