Mysql
 sql >> база данни >  >> RDS >> Mysql

Пренареждане на данни от колони в mysql

Ако броят на промените е доста малък, можете да генерирате тромав, но доста ефективен оператор UPDATE, ако знаете идентификаторите на включените елементи:

UPDATE categories
JOIN (
    SELECT 2 as categoryID, 3 as new_order
    UNION ALL
    SELECT 3 as categoryID, 4 as new_order
    UNION ALL
    SELECT 4 as categoryID, 2 as new_order) orders
USING (categoryId)
SET `order` = new_order;

или (което ми харесва по-малко):

UPDATE categories
SET `order` = ELT (FIND_IN_SET (categoryID, '2,3,4'),
                   3, 4, 2)
WHERE categoryID in (2,3,4);

UPD :

Ако приемем, че знаете текущия идентификатор на категорията (или нейното име), старата й позиция и новата й позиция, можете да използвате следната заявка за преместване на категория надолу в списъка (за преместване нагоре ще трябва да промените between условие и new_rank изчисление до rank+1 ):

SET @id:=2, @cur_rank:=2, @new_rank:=4;

UPDATE t1
JOIN (
  SELECT categoryID, (rank - 1) as new_rank
  FROM t1
  WHERE rank between @cur_rank + 1 AND @new_rank
  UNION ALL
  SELECT @id as categoryID, @new_rank as new_rank
) as r
USING (categoryID)
SET rank = new_rank;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да получите текущия идентификатор на транзакция в базата данни с помощта на JDBC или Hibernate?

  2. Обработка на големи количества данни в PHP без изчакване на браузъра

  3. Преобразуване на времеви низ в десетични часове PHP

  4. Трябва да извадите продуктовите данни от базата данни на mysql

  5. Генериране на дърво на базата на дълбочина от йерархични данни в MySQL (без CTEs)