简体   繁体   English

选择我没有的数据库项目

[英]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));

Result 结果

[[{"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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM