Использование SQL для пакетного обновления столбцов на основе позиции в результате операции сортировки? - PullRequest
1 голос
/ 26 мая 2011

Мой мозг решил перестать работать этим утром.Мне нужен совместимый с MySQL и SQLite запрос, который позволит мне пакетно обновить столбец «display_order» таблицы на основе сортировки по другому столбцу.

Например, скажем, у меня есть следующие поля: display_order, first_name,last_name, date_created.Я хотел бы сказать «сортировка по фамилии и обновить display_order, чтобы быть последовательным».

К вашему сведению, база данных намного сложнее, чем просто эти поля, и все было настолько плохо спроектировано, что сложная сортировка на лету занимаетдесятилетия.Тем не менее нам нужно заблаговременно получить данные для данного отчета, транзакции и т. Д., Чтобы работал прямой «SELECT * FROM tBL ORDER BY display_order».

Best.

Ответы [ 2 ]

1 голос
/ 31 декабря 2012

Вот что я сделал, когда захотел обновить столбец последовательности с сортировкой заголовка таблицы.(Обычно порядок сортировки фиксируется по истинному положению в серии, но набор заголовков разных разовых разговоров должен быть отсортирован по названию и обновляться каждый раз при добавлении нового разговора).

UPDATE resource r
JOIN(
SELECT
    resource.resource_key AS rkey,
    @curRow := @curRow + 1 AS row_number
FROM
    resource,
    (SELECT @curRow := 0) rtemp
WHERE
    grouping_key = 'MMMISC'
ORDER BY
    resource.title
) c ON r.resource_key = c.rkey
SET r.group_sequence = c.row_number

Шляпа для это и это для вдохновления ответа ...

PS Я не знаю, работает ли он в SQLite, ноэто происходит в MySQL ...

0 голосов
/ 26 мая 2011

Я не уверен, что это работает для вас или нет.Создайте временную таблицу с идентификатором столбца AUTO_INCREMENT «ID» вместе с другими столбцами, аналогичными your_table, и вставьте временную таблицу с результатом «select * from your_table order by last_name».Затем обновите столбец your_table.display_order, указав temp.ID, где your_table.last_name = temp.last_name.

...