如果已经购买,则从搜索结果中删除该图书

时间:2013-04-16 12:08:40

标签: php mysql

我正在尝试检查books_ordered表,以获取已订购的书籍ISBN列表。如果ISBN_sedered表中存在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 个答案:

答案 0 :(得分:1)

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

select b.* from book b
left join books_ordered o on b.isbn = o.isbn
where o.isbn is null

答案 1 :(得分:0)

“book”的数据库结构是什么?您可以轻松地制作“JOIN”-Command。

答案 2 :(得分:0)

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

但我可能会在SQL语句中进行处理。类似的东西:

SELECT * FROM book where isbn not in (select isbn from books_ordered)

答案 3 :(得分: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的所有书籍。

我希望对你有用。