我正在建立一个网站,用户可以在其中免费创建帖子。他们还可以为他们的帖子支付一些额外的知名度,这意味着付费帖子将首先显示在搜索结果中。付费帖子和未付费帖子都位于同一个表中,并且帖子是否付费是从列中计算出来的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
弄乱了排序?