1

私のアプリケーションには、2 つのテーブルがあります。1 つは記録を追跡するためのもので、もう 1 つは特定のページの個々のページビューを追跡するためのものです。ページ ビュー イベントごとに、ビュー テーブルにレコードが書き込まれます。

統計を計算するために、これらのビューの数を集計し、record_id でグループ化して別のテーブルに保存しようとする cron ジョブがあります。

次の挿入クエリを実行すると、うまく機能します。

insert into Details (record_id, views)
(select record_id, count(id) from Views where 1 group by record_id)

残念ながら、これは挿入でしか機能せず、挿入/更新するための適切なクエリを思いつくのに苦労しています。を使用してみましOn Duplicate Key Updateたが、既存のクエリで動作させる方法がわかりません。可能であれば、これを PHP でスクリプト化し、一連の個々のクエリを実行する代替手段を回避したいと考えています。

ここに私のテーブル定義があります:

Views
id (int) PK
record_id (int)
created_at (date)

Details
record_id (int) PK
views (int)

注:また、将来的には、詳細テーブルに他の統計を表す列を追加することを計画しているため、Truncate を実行して上記の元の挿入クエリを再実行することは、実際には実行可能な解決策ではありません。

4

1 に答える 1

2

最後に追加するだけです:

insert into Details (record_id, views)
(select record_id, count(id) from Views group by record_id)
on duplicate key update views = values(views);

ただし、これが機能するにrecord_idは、一意である必要があります。

于 2012-10-29T21:30:11.287 に答える