2015-05-04 5 views
1

Это, как я получаю некоторые книги, перечисленные в моем приложении:Выберите элементы для базы данных, которые не имеют

$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»: «Найдите четырехлистник», «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 »:« Нет »}}]

Однако я хочу перечислить только те КНИГИ, которые пользователь ($sessionid) НЕ имеет.

Это, как я список текущих BOOKIDs на пользователя:

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

РЕЗУЛЬТАТ:

[[{ "BookID": "000000001"}, { "BookID": "000000003 «}, {» BookID «:» 000000999" }]]

в конечном итоге я хочу получить JSON, как в первой, но без BOOKID = 000000999, поскольку он присутствует во втором ,

Я попытался с помощью

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

, но он дал мне пустой результат.

ответ

0

У вас возникли проблемы в вашем подзапросе. Вы ссылаетесь на USERS_BOOKS.BOOKID, который не входит в объем вашего подзапроса. Что вам нужно сделать, так это передать список книг, которые уже понравились

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

Затем передайте свой идентификатор пользователя. Это должно выбрать все книги, которые нравится пользователю, и создать список, который может игнорировать этот основной запрос.

+0

Это тоже дает мне нуль. Btw это должно быть 'WHERE BOOKS_NEW.ID NOT IN' – erdomester

+0

Я нашел проблему в подзапросе. Проверьте мое обновление – Machavity

+0

Это выглядит хорошо. Мне нужно проверить это, потому что мой реальный запрос намного сложнее. Я вернусь, спасибо! – erdomester