【发布时间】:2013-03-22 17:07:58
【问题描述】:
任何人都可以帮助我进行此类查询。
我有:
-
posts表 -
comments表
它们通过comments.post_id = posts.post_id 列链接。
我的用户可以通过 cmets 过滤过去的帖子:
- 1 小时
- 24 小时
- 2 天等
如果用户选择显示过去1小时的帖子,但在此期间没有帖子,我们需要逐步进行:
选择过去 1 hour 的帖子,如果为空 - 过去 24 hours,如果为空 - 过去 2 days,如果为空 - 自成立以来(无任何条件)。
谁能帮我建立这样的查询?
UPD
“按 cmets 过滤帖子”是指按 cmets 计数排序。
所以实际上目标是请求“向我显示过去 XXX 小时内留下的按 cmets 计数排序的帖子”。
如果选择“过去一小时”,但过去 1 小时内没有 cmets 的帖子,我们需要获取过去 24 小时内剩余的 cmets 帖子(按 cmets 计数排序)等等。
表格结构
帖子:
- post_id
- 标题
- 内容
- 添加日期
评论
- comment_id
- 内容
- post_id
- 添加日期
所以链接是posts.post_id = comments.post_id。
当用户查看过去一小时内评论最多的帖子时,我希望得到下一个结果:
posts.post_id | comments_count | posts.date_added | group
---------------+----------------+------------------+----------------
156 | 8 | 2013-04-02 | hour
154 | 3 | 2013-04-02 | hour
129 | 1 | 2013-03-10 | 24 hours
13 | 14 | 2013-02-18 | 48 hours
138 | 6 | 2013-03-29 | week
137 | 4 | 2013-03-29 | week
161 | 21 | 2013-04-11 | month
6 | 2 | 2013-01-24 | year
103 | 8 | 2013-03-02 | since inception
结果排序:
- 列表顶部是 2 个在过去一小时内发表评论的帖子,并按 cmets 计数排序。
- 接下来,我们放置在过去一天发表评论的帖子。
- 下一个 - 已在 2 天内发表评论的帖子
- 已于上周发表评论的帖子,再次应按 cmets 计数排序
- 过去一个月
- 过去一年
- 在这个列表的最后,我们需要放置评论超过一年的文章,它们也应该按 cmets 计数排序。
提前致谢。
【问题讨论】:
-
我认为您最好的解决方案是将每个查询包装在
if()语句中。如果记录数为 0,则运行下一个查询。 -
但过滤器间隔存储在另一个表中,因此管理员可能会增加间隔数。例如。他可以为“过去一周”创建另一个过滤器。所以在这种情况下,我们需要在每次过滤器更改时修改查询
-
如果他可以创建一个新过滤器,那么只需循环一个包含所有可能日期范围的查询
-
@balkon_smoke 你可以为每个表发布一些示例数据,然后通过过滤获得所需的结果吗?
-
@bluefeet 我更新了问题,请检查一下,我将非常感谢任何帮助
标签: mysql dateinterval