MYSQL запрос с опцией GROUP_CONCAT - PullRequest
0 голосов
/ 25 января 2020

У меня проблема с получением правильного результата из таблиц.

У меня есть 3 таблицы:
Таблица: Статьи

|article_id          | article_title   |
|1                   | Title 1         |
|2                   | Title 2         |


Таблица: Invited_to_read

|user_id             | article_id      |
|10                  | 1               |
|20                  | 1               |
|10                  | 2               |
|10                  | 3               |


Таблица: прочитано

|user_id             | article_id      |
|10                  | 1               |
|20                  | 1               |
|30                  | 1               |
|20                  | 2               |


Что я хочу получить, если все, кто был приглашен, также прочитали статью, результат должен быть верным , иначе false.

Например, если я хочу получить информацию для article_id = 1, тогда я должен получить TRUE, поскольку все приглашенные пользователи прочитали его.
Например, если я хочу получить информацию для article_id = 2 , тогда я должен получить ЛОЖЬ как пользователь, по крайней мере, один пользователь, который пригласил неподтвержденное чтение.
Например, если я хочу получить информацию для article_id = 3, тогда я должен получить ЛОЖЬ, так как нет никакого подтвержденного пользователем чтения.

Если какой-либо пользователь, который не приглашен на чтение статьи, подтверждает это, это вообще не важно.
Итак, суть. Мне нужно знать, читали ли все приглашенные пользователи статью или нет.
Спасибо.

1 Ответ

0 голосов
/ 25 января 2020

Вы можете получить нужные результаты, LEFT JOIN добавив таблицу Invited_to_read в таблицу readed и сравнив количество пользователей, приглашенных для чтения статьи, с количеством пользователей, у которых есть * 1005. * прочитайте статью:

SELECT i.article_id,
       COUNT(i.user_id) = COUNT(r.user_id) AS all_read
FROM Invited_to_read i
LEFT JOIN readed r ON r.user_id = i.user_id AND r.article_id = i.article_id
GROUP BY i.article_id
ORDER BY i.article_id

Вывод (для ваших примеров данных):

article_id  all_read
1           1
2           0
3           0

Демонстрация по SQLFiddle

...