已用ORDER BY置顶指定评论,如何让其余行从id<5开始展示?
实现指定评论置顶+非置顶内容优先展示id<5的记录
你可以通过多层排序条件来实现这个需求,核心是给不同类别的记录设置排序优先级:
SELECT * FROM comments ORDER BY -- 第一优先级:将'my comment'置顶 comment = 'my comment' DESC, -- 第二优先级:非置顶内容中,优先展示id小于5的记录 CASE WHEN comment <> 'my comment' THEN id < 5 ELSE 0 END DESC, -- 第三优先级:同一类别内按id降序排列(匹配示例中的顺序) id DESC;
逻辑说明:
comment = 'my comment' DESC:将内容为'my comment'的记录排在最前面,DESC确保这类记录按id从大到小排列(对应示例里的149、148、147)。CASE WHEN comment <> 'my comment' THEN id < 5 ELSE 0 END DESC:针对非置顶记录,把id < 5的条目标记为true(数值1),其余标记为false(数值0),DESC让这类记录优先展示。id DESC:在同一优先级组内,所有记录按id降序排列,保证非置顶的id<5记录按4、3、2、1的顺序展示,和预期结果一致。
如果你的需求是非置顶内容仅展示id<5的记录(而非“从id<5开始展示”),可以在WHERE子句中添加过滤条件:
SELECT * FROM comments WHERE comment = 'my comment' OR id < 5 ORDER BY comment = 'my comment' DESC, id DESC;
内容的提问来源于stack exchange,提问作者ryandra
相关产品推荐
相关产品推荐

