gpt4 book ai didi

php - 复杂的 MySQL join/where 子句

转载 作者:行者123 更新时间:2023-11-29 14:03:55 25 4
gpt4 key购买 nike

我的数据库中有 2 个表(实际上更多,但目前不关心它们)。

一张表存储状态为“已发布”或“垃圾”的图书。书籍的状态为已发布或垃圾,具体取决于该书是否继续保存。

另一个表存储有关特定用户是否阅读过特定书籍的数据。

我想显示用户已阅读和尚未阅读且仍在携带的所有书籍的列表。我创建了一个查询,该查询将连接两个表并将每本书与特定用户和读取日期(无论状态如何)进行匹配,如果未读则为 NULL。问题是,虽然我想显示用户尚未阅读的书籍,但我不想显示用户尚未阅读且不再携带的书籍(状态为垃圾)。

目前,我还无法实现这一目标。在 PHP 端的 foreach 循环中,我检查是否已阅读一本状态为垃圾的书,如果没有,则跳过它。我觉得这在数据库方面效率很低。

下面是我目前拥有的脚本。我想要完成的事情可能吗?效率会更高还是更低?感谢您的帮助。

 SELECT 
book.ID as actual_book_id,
book.post_title,
book.post_status,
read.*
FROM books as book
LEFT OUTER JOIN book_club as read
ON read.book_id = book.ID
AND read.user_id = $userID
WHERE book.post_type = 'book'
AND book.post_status IN ('publish','trash')
ORDER BY
book.post_title ASC

假设 $userID 是与用户相关的有效整数

最佳答案

您必须添加一些更复杂的子句,而不仅仅是 IN。

SELECT 
book.ID as actual_book_id,
book.post_title,
book.post_status,
read.*
FROM books as book
LEFT OUTER JOIN book_club as read
ON read.book_id = book.ID
AND read.user_id = $userID
WHERE book.post_type = 'book'
AND (book.post_status = 'publish' OR
(book.post_status = 'trash' AND read.<columnDate> IS NOT NULL))
ORDER BY
book.post_title ASC

关于php - 复杂的 MySQL join/where 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14666453/

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