[英]Select items for database that I don't have
This is how I get some BOOKs listed in my application: 这是我如何在应用程序中列出一些书的方法:
$sessionid = '000000000015';
$stmt = $conn->prepare("
SELECT
BOOKS_NEW.ID AS BOOKID,
BOOKS_NEW.BOOK_NAME,
MAX(USERS_BOOKS.DATE_MODIFIED) AS MAXDATE,
CASE WHEN ? IN (SELECT USERID FROM USERS_LIKES WHERE BOOKID = BOOKS_NEW.ID) THEN 'Yes' ELSE 'No' END AS DID_I_LIKE_IT
FROM
USERS_BOOKS
INNER JOIN
BOOKS_NEW ON BOOKS_NEW.ID=USERS_BOOKS.BOOKID
GROUP BY
USERS_BOOKS.BOOKID
ORDER BY
MAXDATE DESC LIMIT $start, $finish");
$stmt -> execute(array($sessionid));
[[{"BOOKID":"000000067","BOOK_NAME":"Find a four leaf clover","MAXDATE":"2015-05-04 15:18:25","DID_I_LIKE_IT":"No"},{"BOOKID":"000000999","BOOK_NAME":"Go to a Houston Rockets game","MAXDATE":"2015-05-04 15:18:16","DID_I_LIKE_IT":"No"},{"BOOKID":"000001000","BOOK_NAME":"Go to a Houston Texans game","MAXDATE":"2015-05-04 15:18:09","DID_I_LIKE_IT":"No"}}]
[[{{BOOKID“:” 000000067“,” BOOK_NAME“:”查找四叶草“,” MAXDATE“:” 2015-05-04 15:18:25“,” DID_I_LIKE_IT“:”否“},{ “ BOOKID”:“ 000000999”,“ BOOK_NAME”:“参加休斯敦火箭队的比赛”,“ MAXDATE”:“ 2015-05-04 15:18:16”,“ DID_I_LIKE_IT”:“否”},{“ BOOKID “:” 000001000“,” BOOK_NAME“:”参加休斯敦德州人的比赛“,” MAXDATE“:” 2015-05-04 15:18:09“,” DID_I_LIKE_IT“:”否“}}]
However, I want to list only those BOOKs that the user ( $sessionid
) does NOT have. 但是,我只想列出用户(
$sessionid
)没有的那些BOOK。
This is how I list the current BOOKIDs of the user: 这是我列出用户当前BOOKID的方式:
$stmt = $conn->prepare("SELECT USERS_BOOKS.BOOKID FROM USERS_BOOKS
WHERE USERS_BOOKS.USERID = ?");
$stmt -> execute(array($sessionid));
RESULT: 结果:
[[{"BOOKID":"000000001"},{"BOOKID":"000000003"},{"BOOKID":"000000999"}]]
[[{ “BOOKID”: “000000001”},{ “BOOKID”: “000000003”},{ “BOOKID”: “000000999”}]]
In the end result I want to get a json like the one in the first one, but without the BOOKID = 000000999
as it is present in the second one. 在最终结果中,我想获得一个与第一个类似的json,但没有
BOOKID = 000000999
因为它出现在第二个中。
I tried using 我尝试使用
WHERE NOT EXISTS (SELECT ID FROM BOOKS_NEW WHERE BOOKS_NEW.ID = USERS_BOOKS.BOOKID)
but it gave me an empty result. 但这给了我一个空洞的结果。
You have a problem in your subquery. 您的子查询中有问题。 You're referencing
USERS_BOOKS.BOOKID
, which is not within the scope of your subquery. 您引用的是
USERS_BOOKS.BOOKID
,这不在您的子查询范围内。 What you need to do is pass the list of books already liked 您需要做的是传递已经喜欢的书籍清单
WHERE BOOKS_NEW.ID NOT IN (SELECT BOOKID FROM USERS_LIKES WHERE USERID = ?)
Then pass your user ID into here. 然后将您的用户ID传递到此处。 That should select all the books that the user likes and generate a list that that main query can ignore.
那应该选择用户喜欢的所有书,并生成一个主查询可以忽略的列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.