Mysql: Как использовать условие WHERE с разбиением - PullRequest
0 голосов
/ 13 марта 2020

Например, есть пользователи, которые читали книги с номерами ниже:

History (1002,1424,2512,4625,1245)
Art (1592,6413,5030,5362)
Fantasy (5929,5920,1245,2152)

И пользователи (a, b, c, d, e)

Я хочу знать, как сделать запрос mysql по вышеуказанным критериям. Я хочу знать, сколько пользователей прочитали все книги по истории, искусству или фэнтези. Так что один из пользователей, прочитавший все книги по истории, искусству или фэнтези, должен быть задержан.

SELECT
count(distinct Users) as User
FROM
table
WHERE
book_id in (1002,1424,2512,4625,1245) or
book_id in (1592,6413,5030,5362) or
book_id in (5929,5920,1246,2152)

И Вышеприведенный запрос, похоже, не содержит всех книг, потому что я использовал 'in'.

, поэтому таблица может выглядеть следующим образом

user|    book_id    |      category
---------------------------------------
a   |      1002     |      History    
a   |      1424     |      History      
a   |      2512     |      History      
a   |      4625     |      History    
a   |      1245     |      History
a   |      2152     |      Fantasy
b   |      1592     |      Art
b   |      6413     |      Art
b   |      5030     |      Art
b   |      5362     |      Art
c   |      5929     |      Fantasy
---------------------------------------

1 Ответ

1 голос
/ 13 марта 2020
SELECT COUNT(user_id) AS userscount
FROM sourcetable
WHERE book_id in (1002,1424,2512,4625,1245,1592,6413,5030,5362,5929,5920,1245,2152)
GROUP BY user_id
HAVING SUM( book_id in (1002,1424,2512,4625,1245) ) = 5
    OR SUM( book_id in (1592,6413,5030,5362) ) = 4
    OR SUM( book_id in (5929,5920,1245,2152) ) = 4

В запросе предполагается, что (user_id, book_id) определено как УНИКАЛЬНОЕ.

...