Таблица обновления SQL, в которой хранится последовательность - PullRequest
2 голосов
/ 06 октября 2011

Я пытаюсь обновить таблицу БД со следующей структурой:

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.

1 Ответ

1 голос
/ 06 октября 2011

t Я думаю, что это получится:

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 tbl2.sequence FROM user_groups_tbl tbl2
                    WHERE tbl2.user_id = #URL.user_id#
                       AND tbl2.group_id = user_groups_tbl.group_id);

Я добавил еще одно условие во вторую половину предложения where, чтобы ограничить возвращаемый подзапросом Group_id. Для этого необходимо добавить псевдоним таблицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...