sql >> Databasteknik >  >> RDS >> Mysql

Omordning av kolumndata i mysql

Om antalet ändringar är ganska litet kan du generera en klumpig men ganska effektiv UPDATE-sats om du känner till ID:t för de inblandade objekten:

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;

eller (vilket jag gillar mindre):

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

UPD :

Förutsatt att du känner till kategorins nuvarande id (eller dess namn), dess gamla position och dess nya position kan du använda följande fråga för att flytta en kategori ner i listan (för att flytta uppåt måste du ändra mellan condition och new_rank beräkning till 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. Hur man fyller i Excel-kalkylblad med MySQL-data med PHP

  2. Få mysql att ignorera where condition

  3. MySQL:Välja alla kolumner i en tabell plus en kolumn från samma tabell

  4. Returnera kolumnprivilegier från en länkad server i SQL Server (T-SQL-exempel)