Sql查询保持“计数”已删除的行

时间:2012-06-09 20:23:41

标签: mysql sql database

我有一个机密网站...我正在尝试制作一个SQL查询,用于计算用户在过去7天内发布的广告数量,但我遇到了问题......

我正在尝试在用户个人资料中显示例如: [用户名]在过去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]'”我向用户显示他的广告数量,向用户B显示他的广告数量广告等...

因此,此查询有效,它会正确计算广告数量,但是,例如,如果用户在网站上输入以及DELETE的1,2或其他任意数量的广告,则此数字将从“[用户名]”中“删除”在过去7天内发布了30条广告“

  1. 例如,假设用户在过去5天内发布了20个广告 - 正确的结果是 [用户名]在过去7天内发布了20个广告
  2. 现在用户进入网站并删除了4个广告 - 现在结果 [用户名]在过去7天内发布了16个广告
  3. 有人可以帮助我,我可以在查询中添加什么,以便计数仍显示正确的广告数量(在我的情况下为20个广告),即使广告已被删除..

    谢谢 干杯

3 个答案:

答案 0 :(得分:6)

不是使用DELETE ... WHERE ...语句删除行,而是添加deleted列并使用UPDATE语句:

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

然后您的计数功能无需修改即可使用。

当然,您现在必须修复所有其余代码,以便不显示已删除的广告。您可以通过向所有其他查询添加WHERE NOT deleted来执行此操作。您还可以创建一个仅显示未删除广告的视图,并更新您的代码以查询此视图而不是原始表。

答案 1 :(得分:4)

不是从系统中删除广告,而是添加“已删除”标记,或将其移至已删除的表格。这样你永远不会丢失它们的记录。

答案 2 :(得分:2)

您无法添加到查询中以查找已删除的数据。您需要来删除数据,但是要为用户要删除的记录添加标记指示它已从显示中删除。

除了允许对记录进行计数外,还具有附加优势,如果他愿意,可以允许用户恢复该广告。