Php 为数据库选择我不知道的项目';我没有

Php 为数据库选择我不知道的项目';我没有,php,mysql,subquery,Php,Mysql,Subquery,以下是我在申请表中列出一些书籍的方式: $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

以下是我在申请表中列出一些书籍的方式:

$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));
后果 [000000067],[BOOKID],[BOOK\u NAME]:“找到一棵四叶三叶草”,“MAXDATE:“2015-05-04 15:18:25”,“我喜欢它吗?”,[BOOKID:“000000999”,“BOOK\u NAME:“去休斯顿火箭队比赛”,“MAXDATE:“2015-05-04 15:18:16”,“我喜欢它吗?”,[BOOKID:“000001000”,“BOOK\u NAME:“去休斯顿德克萨斯队比赛”,“MAXDATE:“2015-05-04 15:18:16”,“我喜欢它吗?”:“否”}]

但是,我只想列出用户(
$sessionid
)没有的书籍

以下是我如何列出用户的当前BookID:

$stmt = $conn->prepare("SELECT USERS_BOOKS.BOOKID FROM USERS_BOOKS
    WHERE USERS_BOOKS.USERID = ?");
$stmt -> execute(array($sessionid));
结果:

[[{“BOOKID”:“00000001”},{“BOOKID”:“00000003”},{“BOOKID”:“000000999”}]]

在最后的结果中,我希望得到一个与第一个类似的json,但是没有第二个中存在的
BOOKID=000000999

我试着用

WHERE NOT EXISTS (SELECT ID FROM BOOKS_NEW WHERE BOOKS_NEW.ID = USERS_BOOKS.BOOKID) 

但是它给了我一个空结果。

您的子查询中有问题。您正在引用
用户\u BOOKS.BOOKID
,它不在子查询的范围内。您需要做的是传递已经喜欢的图书列表

WHERE BOOKS_NEW.ID NOT IN (SELECT BOOKID FROM USERS_LIKES WHERE USERID = ?)

然后将您的用户ID传递到此处。这将选择用户喜欢的所有书籍,并生成一个主查询可以忽略的列表。

它也给我空值。顺便说一句,它应该是
在books\u NEW.ID不在的地方。
我在子查询中发现了一个问题。请检查我的更新。它看起来不错。我需要测试它,因为我真正的查询要更详细我会回来的,谢谢!