Проверка 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/.

Другие вопросы по тегам