Я пытаюсь обновить таблицу БД со следующей структурой:
user_id, group_id, other_data, sequence
user_id
указывает на пользовательскую таблицу со всеми пользовательскими данными и group_id
указывает на запись в таблице информации о группе.other_data
ничего важного.sequence
- это значение, которое используется для определения того, в каком порядке перечислены пользователи.Например, если я вытаскиваю всех из group_id
1234, sequence
используется, чтобы упорядочить их по.
Я пытаюсь запустить обновление, чтобы изменить эту последовательность, когда пользователь удаляется из таблицы.В настоящее время я работаю со сценарием CFML, который выполняет запрос SELECT, проходит через него, а затем выполняет отдельные обновления.Что я хочу сделать, так это написать все это в одном запросе.
Возникает проблема, когда пользователь входит в более чем одну группу (что обычно имеет место).Вот что у меня сейчас есть:
UPDATE
user_groups_tbl
SET
sequence = sequence - 1
WHERE
group_id IN (SELECT group_id FROM user_groups_tbl WHERE user_id = #URL.user_id#)
AND
sequence > (SELECT sequence FROM user_groups_tbl WHERE user_id = #URL.user_id#);
Я могу сказать, что с этим запросом ГДЕ для последовательности не правильно;это приведет к некоторому «случайному» порядковому номеру, а не к тому, который привязан к записи с правильным group_id
.
Я не знаю, объяснил ли я это достаточно хорошо, надеюсь, кто-то будетсмогу увидеть, что я пытаюсь сделать здесь с этим ... Если кто-то может помочь с запросом, он будет очень признателен.
В настоящее время он выполняется на сервере MS SQL 2005, но будетв конечном итоге будет перенесен на движок MySQL.