Как сделать выборку из таблицы с учетом данных в другой таблице?

Уважаемые знатоки.
Прошу помощи в понимании и правильном построении запроса к БД, есть 3 таблицы, в одной хранятся данные, по отработанным задачам пользователей, имеет вид id, название задачи, кто выполнял, когда выполнял, в второй таблице хранится график работы, вида id, ФИО пользователя, График работы, в третью базу я пишу данные которые скрипт собирает, а именно кому раздает какую задачу, вид id, id задачи, фио исполнителя.

Вопрос: Как правильно построить запрос, чтобы он выбирал пользователя из графика, с наименьшей датой из таблицы задач с 30 интервалом и при этом смотрел в 3 таблицу, что бы задачи не попадали по 2 раза одному человеку.

Сейчас есть такой запрос:

SELECT * FROM zadachi WHERE zadachi.id_z= {$zad['id']} AND date <= DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY) AND name IN(SELECT name FROM users WHERE day=\"7-19\" OR day=\"9-21\") AND name NOT IN(SELECT user FROM tasktemp) LIMIT 1


Запрос сам отрабатывает вроде нормально, но после обновления страницы в браузере, снова срабатывает AND name NOT IN(SELECT user FROM tasktemp) и собственно все пользователи от туда пропадают.

Может есть какой то способ оптимизировать запрос?
Заранее спасибо.
  • Вопрос задан
  • 226 просмотров
Пригласить эксперта
Ответы на вопрос 1
@justpusher
1) в запросе нет сортировки - вам же нужно пользователя с наименьшей датой
2) NOT IN(SELECT user FROM tasktemp) - это исключит всех пользователей, которые фигурируют в tasktemp, а вам нужно только исключить попадание задачи к тому же пользователю повторно.

Таблицы всегда связываются по id, связывать по name неэффективно.
Запрос вы вставили с ошибкой (лишние бекслеши).
Вместо словесного описания таблиц лучше приложите их структуру, можно с комментариями.

Очень рекомендую пройти курс www.sql-ex.ru
будете значительно увереннее себя чувствовать в sql.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы