Mysql сортировка?
Формулировка задачи:
Здравствуйте, подскажите пожалуйста, есть таблица такого вида:
id name order
1 test1 1
2 test2 2
3 test3 3
4 test4 4
возможно ли средствами mysql отсортировать в базе (т.е не select, а update) order у первой строки сдвинуть в конец, а остальным убавить на 1?
т.е в результате должно быть
id name order
1 test1 4
2 test2 1
3 test3 2
4 test4 3
спасибо
Решение задачи: «Mysql сортировка?»
textual
Листинг программы
select * from test; +----+-------+-------+ | id | name | order | +----+-------+-------+ | 1 | test1 | 1 | | 2 | test2 | 2 | | 3 | test3 | 3 | | 4 | test4 | 4 | +----+-------+-------+ update test, (select id, name, if(`order` = @mi,@ma,`order`-1) `order` from test, (select @ma:=(select max(`order`) from test)) x, (select @mi:=(select min(`order`) from test)) y) t1 set test.`order`=t1.`order` where test.id=t1.id; select * from test; +----+-------+-------+ | id | name | order | +----+-------+-------+ | 1 | test1 | 4 | | 2 | test2 | 1 | | 3 | test3 | 2 | | 4 | test4 | 3 | +----+-------+-------+
Объяснение кода листинга программы
- Первый запрос на языке SQL (Structured Query Language) выбирает все строки из таблицы
test
. Оператор+
добавляет столбецid
, поэтому он выводится в левой части таблицы. - В запросе используется оператор
update
, который обновляет значения столбцаorder
в таблицеtest
. - В скобках находится подзапрос, который вычисляет новое значение для
order
. - Подзапрос в скобках использует временные переменные
@mi
и@ma
для хранения минимального и максимального значенийorder
. - В подзапросе в скобках используется ещё один подзапрос, который вычисляет разницу между текущим значением
order
и максимальным значением, чтобы получить новое значение дляorder
. - В условии обновления таблицы
test
используется операторwhere
, чтобы обновить только те строки, которые соответствуют подзапросу. - Последний запрос выбирает все строки из таблицы
test
после обновления.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д