sql >> データベース >  >> RDS >> Mysql

mysqlの列データの並べ替え

    変更の数が少なすぎる場合、関連するアイテムのIDがわかっていれば、不器用ですが効率的な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

    カテゴリの現在のID(またはその名前)、古い位置、および新しい位置がわかっていると仮定すると、次のクエリを使用してカテゴリをリストの下に移動できます(上に移動するには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. postgresで最大接続数を増やす方法は?

    2. PostgresでGroupByに列がないことを許可しているのはなぜですか?

    3. OracleデータベースでSELECTINTOステートメントを使用して一括収集句を使用する方法

    4. 広告のクリック数と視聴回数を集計する