0

(私が思うに) 複雑なクエリを書くのに苦労しています。サイト上のすべてのアクティブなレコーディングを保持するレコーディング テーブルがあります。「削除のマーク」が付けられる前に、指定された X 週間記録を保持したいと考えています。また、特定の「recs_bus_id」またはビジネスの X 数の録音のみを保存したいと考えています。各ビジネスは、削除のマークが付けられる前に、アカウントに対して X 件の録音しか許可されておらず、recs_mark_deletion_time のタイムスタンプも更新されます。

これが私の問題です。非常に多くのクエリを実行せずにこれを行う方法がわかりません

録音

recs_id  |  recs_insert_time | recs_title | recs_bus_id | recs_mark_deletion_time | recs_mark_deletion

ビジネス

bus_id | bus_rec_save_weeks | bus_max_rec_save_count
  • bus_max_rec_save_count は、ビジネスが保存できる録音の総数です

現在、録音に削除のマークを付けるためにこれを行っています

SELECT * FROM recordings JOIN businesses ON Recording.recs_bus_id = Business.bus_id AND Recording.recs_insert_time < NOW() - INTERVAL Business.bus_rec_save_weeks WEEK
  • 次に、結果セットをループして、削除のためにそれぞれマークを削除します

「bus_id」に基づいて、「bus_max_rec_save_count」の外側にあるレコードの結果セットを取得して削除のマークを付ける方法がわかりません。

4

1 に答える 1

1

updateフラグを更新するために使用する必要があります。

update recordings JOIN
       businesses
       ON Recording.recs_bus_id = Business.bus_id AND
          Recording.recs_insert_time < NOW() - INTERVAL Business.bus_rec_save_weeks WEEK
  set recordins.MarkForDeletion = 1;
于 2013-08-03T15:01:00.987 に答える