Помогите составить запрос на MySQL. Поиск во второй таблице — синхронизировалась ли уже эта запись для этого пользователя

Есть 2 таблицы:
tree:
1. id — autoincrement index
2. changetime — хранит последнее время синхронизации

tree_sync:
1. id — ссылка на id первой таблицы.
2. changetime — время изменения записи на момент синхронизации пользователя
3. user_id — уникальный код пользователя

Задача:
Нужно вывести все элементы таблицы tree, у которых tree.changetime не равен максимальному времени изменения в таблице tree_sync.changetime для конкретного пользователя. + добавить все элементы tree, которых нет в второй таблице.

Пример:
tree:
id: 4552 changetime:13:10
id: 4553 changetime:12:40
id: 4554 changetime:12:35
id: 4555 changetime:12:37

tree_sync:
id: 4552 user_id: x1 changetime: 11:40
id: 4552 user_id: x1 changetime: 11:45
id: 4552 user_id: x1 changetime: 11:55
id: 4552 user_id: x2 changetime: 12:30
id: 4552 user_id: x2 changetime: 13:10

Нужно вывести:
id: 4552; changetime: 13:10 для пользователя x1
и не выводить 4552 для пользователя x2, так как он уже синхронизировался.

PS: Задача словами: нужно вывести все id из первой таблицы, которые ещё не синхронизировались для этого пользователя. Во вторую таблицу записывается каждая синхронизация любых пользователей. То что запись изменилась, видно по changetime в первой таблице. Если пользователь x1 синхронизировался, то в tree_sync будет запись с tree.changetime = tree_sync.changetime. Как вывести всё это одним запросом на mySQL?
  • Вопрос задан
  • 2935 просмотров
Решения вопроса 1
ivnik
@ivnik
select t.* from tree t left outer join (select id, max(changetime) changetime from tree_sync where user_id=2 group by id) ts on (t.id=ts.id) where ts.changetime is null or ts.changetime < t.changetime
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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