0

MySQL に、ユーザーがイベントを投稿するテーブルがあります。個々の ID が投稿されるため、投稿するすべてのイベントをアカウントに関連付けることができます。ただし、一度に1人のユーザーのイベントのみをカウントする自動インクリメントフィールドを配置したいと思います。

出来ますか?はいの場合、どうすればそれを達成できますか?

たとえば、ID 544 のユーザーが 4 つのイベントを投稿した場合、テーブルの 421 イベントであっても、4 番目のイベントは自動インクリメント列で 4 としてマークされます...

4

1 に答える 1

1

そのようなフィールドを入れることもできますが、最新の状態に保つためのトリガーが必要になります。その後、行が更新または削除されると、維持が難しくなります。

ただし、変数を使用して、クエリでこれを非常に簡単にシミュレートできます。

select e.*,
       @rn := if(@userid = userid, 1, @rn + 1) as UserSequenceNumber,
       @userid := userid
from events e cross join
     (select @rn := 0) const
order by userid;

update実際に値をテーブルに格納する場合は、これをステートメントに組み込むこともできます。繰り返しますが、値を最新の状態に保つには、一連のトリガーが必要です。

また、上記は実際に機能します。ただし、MySQL は、引数が順番に処理されることを保証しません。そのため、理論的にはを の@userid前に割り当てることができますが@rn、実際にはそうではないようです。

于 2013-07-29T01:47:23.930 に答える