0

Web アプリケーションに PHP/MySQL を使用しています。ユーザーは、さまざまなジョブの項目を入力できます。項目の順序は重要です。このために、「ordernumber」フィールドがあります。新しい行を挿入するのは簡単です。現在の最高の注文番号に 1 を追加するだけです。しかし、行の削除と挿入には注意が必要です。現在、クエリを使用して、削除するたびにすべての注文番号を更新しています。ただし、同じリクエストで多くの削除が行われる場合があります。もっと簡単な方法があると考えています。たとえば、テーブルの注文番号が

1, 2, 5, 8, 9, 10

それらを更新するために実行できる更新クエリはありますか

1, 2, 3, 4, 5, 6
4

2 に答える 2

0

行を削除する場合:

update mytable
set ordernumber = ordernumber-1
where ordernumber > {number deleted}

これは相対的な更新であるため、複数の削除があるかどうかは問題ではありません。

于 2012-05-02T16:13:09.107 に答える
0

シーケンス全体を更新するには: (これは SQL Server で機能します - おそらく MySQL に適応させることができます!)

while exists (
    select *
    from mytable mt1
    where not exists (
        select *
        from mytable mt2
        where mt2.ordernumber = mt1.ordernumber - 1
        )
    and mt1.ordernumber > 1
    )
begin
    update mytable
    set ordernumber = (
        select isnull( max( mt3.ordernumber ), 0) + 1
        from dbo.mytable mt3
        where mt3.ordernumber < mytable.ordernumber
    )
end
于 2012-05-02T16:31:35.617 に答える