SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 19.11.2021 14:02:08

Avistar
Участник
Зарегистрирован: 19.11.2021
Сообщений: 3

Помогите вывести невыполненные юзером задачи

Здравствуйте.
Сделать выборку значений из двух таблиц/

Таблица с заданиями
+----+-------+
| id | task     |
+----+-------+
|  1 | task1   |
|  2 | task2   |
|  3 | task3   |
|  4 | task4   |
+----+-------+
Таблица с id юзеров, которые выполнили задание.
+---------+------+
| user_id |task_id |
+---------+------+
|  1      | 1         |
|  1      | 2         |
|  2      | 3         |
|  3      | 4         |
+---------+------+

Юзер 1 выполнил задание 1 и 2. Нужно вывести те задания, которые он еще не делал:

+---------+---------+---+
| user_id | task_id | task  |
+---------+---------+--+
|  1      | 3       | task3 |
|  1      | 4       | task4 |
+---------+---------+-+


Пытаюсь объединить:
SELECT table2.id, table2.text, table1.user, table1.task_id  FROM `table2` JOIN  `table1` where `user` != 1 AND table1.task_id = table2.id;
Выдает полную ерунду.

Перекопал весь интернет, перепробовал кучу вариантов, но все не то.
Подскажите, пожалуйста, как это реализовать?
Спасибо.

Неактивен

 

#2 19.11.2021 14:35:25

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: Помогите вывести невыполненные юзером задачи

SELECT task.*, task_user.* FROM task INNER JOIN task_user ON task.id = task_user.task_id

Это выберет те задачи, которые делались
Выбирайте нужные поля и фильтруйте в WHERE то что Вам нужно.

Нужно вывести те задания, которые он еще не делал:
Попробуйте

SELECT task.* FROM task LEFT JOIN task_user ON task.id = task_user.task_id WHERE task_user.user_id = 1 AND task_user.task_id IS NULL;

И почитайте про разницу между JOIN и LEFT JOIN :-)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 19.11.2021 16:27:53

Avistar
Участник
Зарегистрирован: 19.11.2021
Сообщений: 3

Re: Помогите вывести невыполненные юзером задачи

Спасибо за подсказку, но тут немного в другом проблема.
Так выводит сделанные задания юзером:

SELECT table2.*, table1.user FROM table2 LEFT JOIN table1 ON table2.id = table1.task_id WHERE table1.user = 1;

Если сделать
table1.user != 1
то выведет все задания сделанные другими юзерами.
А как сделать вывод заданий, который юзер НЕ сделал?

Неактивен

 

#4 19.11.2021 16:40:47

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2419

Re: Помогите вывести невыполненные юзером задачи

SELECT * from task WHERE id NOT IN (SELECT task_id from task_user WHERE user_id = 1);

?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 19.11.2021 16:51:07

Avistar
Участник
Зарегистрирован: 19.11.2021
Сообщений: 3

Re: Помогите вывести невыполненные юзером задачи

Огромное спасибо

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson