2

我有一个分类网站...我正在尝试进行一个 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]'”我向用户 A 展示了他的广告数量,并向用户 B 展示了他的广告数量等......

所以这个查询有效,它正确计算了广告的数量,但是,如果例如用户在网站上输入并删除了 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 回答