Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Сделать выборку значений из двух таблиц/
Таблица с заданиями
+----+-------+
| 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;
Выдает полную ерунду.
Перекопал весь интернет, перепробовал кучу вариантов, но все не то.
Подскажите, пожалуйста, как это реализовать?
Спасибо.
Неактивен
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 :-)
Неактивен
Спасибо за подсказку, но тут немного в другом проблема.
Так выводит сделанные задания юзером:
Неактивен
SELECT * from task WHERE id NOT IN (SELECT task_id from task_user WHERE user_id = 1);
?
Неактивен
Огромное спасибо
Неактивен