我正在建立一個博客,我有一個問題。應該有一些粘性帖子。我想要的是首先得到粘性帖子,然後是其餘的。sql查詢首先獲得粘性帖子
一個查詢的工作原理是
select * from
(
(select *,true as st from blog where "stickyUntil" > current_timestamp)
UNION all
(SELECT *,false as st from blog where "stickyUntil" < current_timestamp or "stickyUntil" is null )
) q
order by st desc, "stickyUntil" DESC ,publish DESC OFFEST x LIMIT z
是workz另一個更簡單的查詢是
select * from blog order by case when "stickyUntil" > current_timestamp then "stickyUntil" end desc nulls last, publish desc;
但是,這將迫使200.000排在內存中不是很快進行排序..
是有一種方法來優化它?
使用兩個單獨的查詢會更好嗎? 感謝
你先查詢看起來不錯。工會沒有錯。在申請限制之前,你是否想要拉太多行?那麼爲什麼要在UNION的每個子查詢中添加一個「LIMIT z」?這將限制子查詢返回的整個集合最大爲2z條記錄。 – Glenn
雖然這個,但它似乎與分頁問題..然後爲了確定OFFSET在第二個查詢我將不得不調用計數的第一個查詢。如果有5個貼,那麼偏移10應該是5 ..應我這樣做? – GorillaApe
@Paths Typo在第一條評論中應該是「爲什麼不添加限制...」。不知道我是否按照這個問題。第一個查詢的LIMIT z沒有OFFSET,第二個查詢的LIMIT z沒有OFFSET,然後你的包裝查詢保持原樣。 – Glenn