我正在建立一個網站,用戶可以在那裏免費創建帖子。他們還可以爲其帖子支付額外的可見性,這意味着付費帖子將首先顯示在搜索結果中。有薪和無薪職位都在同一張表中,並且職位是否支付是從paid_until
列中計算得出的,該列僅包含時間戳。MYSQL:加入兩個排序結果集
現在,爲了使分頁變得簡單,我希望能夠從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人支付這個費用呢? – aspyct