gpt4 book ai didi

PHP MySQL 在下一个可用数字处停止循环

转载 作者:行者123 更新时间:2023-11-29 06:51:38 25 4
gpt4 key购买 nike

我有一个包含以下信息的数据库:

--------------
id | Book | Names
1 | 1 | Tom
2 | 8 | James
3 | 10 | Tom
4 | 2 | Tom
5 | 17 | James
6 | 2 | James
7 | 9 | James
8 | 7 | Tom
9 | 8 | Tom

此表显示“Tom”和“James”阅读的书籍。

这些是我需要的要求:

  1. 显示下一本书未读。 (例如,汤姆的为“3”,詹姆斯的为“1”)

  2. 跳过书籍“1”、“10”和“15”,因为这些书籍不再可用。 (所以在詹姆斯的例子中,下一本书将是“3”)

  3. 如果不能连续,任何未读过的随机书籍也可以。

这就是我所做的:

$sql = "Select * FROM books Group By names"; 
$result = $conn->query($sql);


if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$sql1 = "SELECT * FROM books WHERE names = '" . $row["names"]. "' ORDER BY book ASC";
$result1 = $conn->query($sql1);
if ($result1->num_rows > 0) {
$newbook = '1';
// output data of each row
while($row1 = $result1->fetch_assoc()) {

if ($row1["book"] == $newbook) {
echo "Exist<br><br>";
$newbook = $newbook+ 1;
} else {
if ($row1["book"] == '1' || $row1["book"] == '10' || $row1["book"] == '17') {
$newbook= $newbook+ 1;

} else {
echo "Add".$newbook."<br><br>";
break;
}
}
}
}
}
}

这就是我已经走了多远。感谢所有帮助。谢谢

最佳答案

在我看来,日历表方法可能是在 MySQL 中完全处理这个问题的一个很好的解决方案。首先定义一个序列表,包含从 1 到最高图书 ID 的值(我将此表称为 seq_table)。然后,要找到给定用户未读过的最低的一本书,一个简单的左连接就可以了:

SELECT MIN(t1.Book) AS next_book
FROM seq_table t1
LEFT JOIN books t2
ON t1.Book = t2.Book AND
t2.Names = 'Tom'
WHERE
t2.Book IS NULL;

如果您想随机选择一本 Tom 没有读过的书,那么我们可以使用以下查询:

SELECT t1.Book AS next_book
FROM seq_table t1
LEFT JOIN books t2
ON t1.Book = t2.Book AND
t2.Names = 'Tom'
WHERE
t2.Book IS NULL
ORDER BY RAND()
LIMIT 1;

关于PHP MySQL 在下一个可用数字处停止循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47194368/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com