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 |
+----+-------+-------+

Объяснение кода листинга программы

  1. Первый запрос на языке SQL (Structured Query Language) выбирает все строки из таблицы test. Оператор + добавляет столбец id, поэтому он выводится в левой части таблицы.
  2. В запросе используется оператор update, который обновляет значения столбца order в таблице test.
  3. В скобках находится подзапрос, который вычисляет новое значение для order.
  4. Подзапрос в скобках использует временные переменные @mi и @ma для хранения минимального и максимального значений order.
  5. В подзапросе в скобках используется ещё один подзапрос, который вычисляет разницу между текущим значением order и максимальным значением, чтобы получить новое значение для order.
  6. В условии обновления таблицы test используется оператор where, чтобы обновить только те строки, которые соответствуют подзапросу.
  7. Последний запрос выбирает все строки из таблицы test после обновления.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.444 из 5