Проверка PHP и MySQL MySQL оставил соединение с указанным условием
Я использую xenforo, у которого есть таблицы:
- пользователь: user_id, user_group_id
- поток: идентификатор_потока, идентификатор_пользователя, липкий
Мне нужен запрос, чтобы изменить user_group_id с 15 на 14, если у них нет какого-либо потока (sticky=0 в потоке).
Возможно ли это с левым соединением, и если да, то как?
Благодарю.
3 ответа
Ты имеешь ввиду:
UPDATE user SET user_group_id=14 WHERE user_group_id=15 AND
0 = (SELECT COUNT(*) FROM thread WHERE sticky=0 AND user_id=user.user_id)
это не использует LEFT JOIN. Обязательно ли использовать LEFT JOIN?
update user u
set u.user_group_id=14
where u.user_group_id=15 and
(select sticky from thread where thread_id = u.user_id)=0;
Это сделает это
update user set user_group_id = 14
where user_group_id = 15
and user_id in (select user_id from threads where sticky=0)
РЕДАКТИРОВАТЬ:
В этом случае, вместо использования подзапроса, вы можете объединить обе таблицы при обновлении, как показано ниже
update user u
inner join thread t on
u.user_id = t.user_id and t.sticky = 0
set u.user_group_id = 14
where u.user_group_id = 15
Смотрите демо sqlfiddle здесь http://sqlfiddle.com/.