2

求人サイトがあります...ユーザーが過去7日間に投稿した広告の数をカウントするSQLクエリを作成しようとしていますが、問題があります...

たとえば、ユーザープロファイルに次のようなものを表示しようとしています。[ユーザー名]は過去7日間に30件の広告を投稿しました

これが私のSQLクエリです->

SELECT COUNT(*) 
FROM table_name 
WHERE user_id = '[user_id]' AND created_date > NOW() - INTERVAL 7 DAY

したがって、私の場合、「table_name」にはすべてのユーザーからのすべての広告が含まれ、「user_id='[user_id]'」によってユーザーAに広告の数を表示し、ユーザーBに広告の数などを表示します。

したがって、このクエリは機能し、広告の数を正しくカウントしますが、たとえば、ユーザーがサイトに入力し、DELETEの1,2または任意の数の広告を削除した場合、この数は「[ユーザー名]が投稿した30」から「マイナス」になります。過去7日間の広告」

  1. たとえば、ユーザーが過去5日間に20件の広告を投稿したとします-正しい結果は、[ユーザー名]が過去7日間に20件の広告を投稿したことです。
  2. これで、ユーザーはサイトにアクセスして、の4つの広告を削除します-結果は、[ユーザー名]が過去7日間に16の広告を投稿したことです。

誰かが私を助けてくれますか、クエリに何を追加すれば、広告が削除された場合でも、カウントに正しい数の広告(私の場合は20個の広告)が表示されます。

ありがとう乾杯

4

3 に答える 3

6

ステートメントを使用して行を削除する代わりに、列をDELETE ... WHERE ...追加してステートメントdeletedを使用しますUPDATE

UPDATE ... SET deleted = 1 WHERE ...

そうすれば、カウント機能は変更なしで機能します。

もちろん、削除された広告が表示されないように、残りのコードをすべて修正する必要があります。WHERE NOT deletedこれを行うには、他のすべてのクエリに追加します。削除されていない広告のみを表示するビューを作成し、元のテーブルの代わりにこのビューをクエリするようにコードを更新することもできます。

于 2012-06-09T20:26:12.537 に答える
4

システムから広告を削除するのではなく、「削除済み」フラグを追加するか、広告を削除済みテーブルに移動します。このようにして、それらの記録を失うことはありません。

于 2012-06-09T20:26:52.410 に答える
2

削除されたデータを見つけるためにクエリに追加できるものは何もありません。データを削除する必要はありませんが、ユーザーが削除したいレコードにマーカーを追加して、データが表示から削除されたことを示します。

レコードをカウントできるようにするだけでなく、ユーザーが必要に応じてその広告を復元できるという追加の利点もあります。

于 2012-06-09T20:30:43.933 に答える