sql >> Databáze >  >> RDS >> Mysql

Změna pořadí dat sloupců v mysql

Pokud je počet změn poměrně malý, můžete vygenerovat neohrabaný, ale poměrně účinný příkaz UPDATE, pokud znáte ID příslušných položek:

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;

nebo (což se mi líbí méně):

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

UPD :

Za předpokladu, že znáte aktuální id kategorie (nebo její název), její starou pozici a novou pozici, můžete použít následující dotaz pro přesunutí kategorie dolů v seznamu (pro posun nahoru budete muset změnit between stav a new_rank výpočet na 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. MySQL-Výkon při objednávání na kalkulovaném sloupci

  2. Při ukládání data a času na server SQL (typ datetime), v jakém formátu je ukládá?

  3. Požadavek na legitimní příklad volání uložené procedury C#:MYSQL

  4. Otázka osvědčeného postupu pro MySQL:seřadit podle ID nebo data?