0

私は何かをするための最も効率的な方法を見つけようとしています、そしてあなたのアドバイスをいただければ幸いです!

次の列のテーブルがあります。

id
category
category_sequence
other_columns

idは、自動インクリメント列であり、主キーです。カテゴリは、UIでユーザーが選択します。

私がやりたいのは、category_sequenceを生成することです。これは、そのcategory+1の既存の最も高いcategory_sequenceです。

たとえば、いくつかの行を挿入すると、次のようになります。

  • 1、1、1
  • 2、1、2
  • 3、2、1
  • 4、1、3

等々。

明らかに、クエリを実行して最高のcategory_sequenceを抽出し、それに追加してから、insertステートメントを実行することができます。しかし、はるかに効率的な方法があります(一部のインサートはかなり大きなループになるので、それを高速化し、クロスオーバーを防ぐための何かが素晴らしいでしょう)。

よろしくお願いします、Kev

4

3 に答える 3

1

あなたが試すことができます

    insert into mytable
    select "categoryselected",coalesce(max(category_sequence),0)+1 from mytable where category = "categoryselected"

それがそのカテゴリの最初のレコードである場合は、caseステートメントでラップする必要がある場合があります。私はそれをテストするためのmysqlを持っていません

于 2009-10-12T16:27:37.660 に答える
0

カテゴリが参照する「Category」テーブルがあるとすると、そこにnext_sequenceフィールドを設定できます。次に、テーブルに挿入トリガーを設定して、次のシーケンス番号を取得し、それをcategory_sequence列に配置して、next_sequenceフィールドをインクリメントします(すべて1つのトランザクションで実行する必要があります)。

于 2009-10-12T16:27:31.950 に答える
0

auto_incrementフィールドをcategory_sequenceに変更してから、主キーをcategory + category_sequenceにすることで、データベースにそれを実行させることができます。次に、idフィールドは希望どおりに機能しないため、削除できます。MySqlは、あなたが説明したとおりにcategory_sequenceフィールドをインクリメントします。

于 2009-10-12T16:28:17.317 に答える