【发布时间】:2013-11-08 23:03:43
【问题描述】:
我正在建立一个网站,用户可以在其中免费创建帖子。他们还可以为他们的帖子支付一些额外的知名度,这意味着付费帖子将首先显示在搜索结果中。付费帖子和未付费帖子都在同一张表中,帖子是否付费是根据paid_until 列计算的,该列仅包含一个时间戳。
现在,为了简化分页,我希望能够从 MySQL 中获得一个不错的结果集,而无需通过 PHP 进行额外的排序,最好使用一个查询。结果集的总限制为 20(如每页 20 个帖子),它应该首先包含所有付费帖子(最多 20 个),然后添加 20-n 个未付费帖子。两个子集都应按其内部的列modified 进行排序。我需要稍后通过设置OFFSET 来跳过相同的结果。
我尝试了JOIN、UNION 和GROUP BY 的不同变体,但还没有找到能够产生我想要的结果的解决方案。
有没有办法写这个:
(SELECT * FROM tbl_post WHERE paid_until >= :time_stamp ORDER BY modified DESC)
UNION
(SELECT * FROM tbl_post WHERE paid_until < :time_stamp ORDER BY modified DESC)
这样它才能真正起作用,因为UNION 搞乱了排序?
【问题讨论】:
-
你不能按
paid_until对所有帖子进行排序吗?只有 20 个付费帖子可能很难,但是如果超过 20 人为此付费怎么办?
标签: php mysql sql sorting select