0

我正在尝试检查 books_ordered 表以获取已订购的图书 ISBN 列表。如果 book_ordered 表中存在 ISBN,我不希望它显示在搜索结果列表中。我有以下代码:

include "include.php";
session_start();

$query1 = 'SELECT isbn as myisbn FROM books_ordered';
$result1 = mysqli_query($con, $query1) or die("Error in query $query1: " . mysqli_error());
while($row = mysqli_fetch_array($result1)){
$isbn=$row['myisbn'];
}

$query = 'SELECT * FROM book';
$result = mysqli_query($con, $query) or die("Error in query $query: " . mysqli_error());

while ($row = mysqli_fetch_array($result)){
if($isbn!=$row[0]){
echo $row[1]."<br>";
}
}
mysqli_close($con);             //closes the connection

?>

我的脚本只在搜索结果的 books_ordered 表中隐藏了第一个 isbn,有人知道为什么吗?我猜这与while循环中的括号有关,我只是想不通。或者,如果有人知道这样做的更好方法,将不胜感激。谢谢。

4

4 回答 4

1

在单个查询中从 book 表中过滤掉不需要的结果会更有效,如下所示:

select b.* from book b
left join books_ordered o on b.isbn = o.isbn
where o.isbn is null
于 2013-04-16T12:14:16.693 回答
0

“书”的数据库结构是什么?您可以轻松地制作“JOIN”命令。

于 2013-04-16T12:11:52.483 回答
0

您仅将最后一个值存储在 $isbn 中,因为它不是数组。您需要将 isbn 添加到一个数组中,然后针对该数组检查第二个查询中的每一行。

但我可能会改为在 SQL 语句中进行处理。就像是:

SELECT * FROM book where isbn not in (select isbn from books_ordered)
于 2013-04-16T12:14:25.177 回答
0

如果我理解得很好,您只想显示尚未订购的书籍。

你可以使用这个 SQL 语句:

SELECT * FROM book WHERE isbn_row NOT IN (SELECT isbn FROM books_ordered)

首先,我们选择已排序书籍的 isbn:SELECT isbn FROM books_ordered 当我们有列表时,使用子句 NOT IN 我们可以从 BOOK 中选择所有书籍,除了我们在第一句中获得 isbn 的所有书籍。

我希望对你有用。

于 2013-04-16T12:15:12.917 回答