Ryan

V2020-05-29

Typecho 完美实现文章置顶的思路

目前我在Typecho圈里看见的文章置顶实现都是使用两个 Select,第一个Select是查询置顶的文章,第二个Select是查询剩余的文章。

这样实现有BUG,而且也不优雅。
置顶x篇文章首页文章数就变成 pageSize + x 了。

我的方法就是添加一个用于排序的字段。

法1

最简单就是新增一个排序字段了。这是MySQL的,SQLITE怎么写忘记了。

ALTER TABLE `prefix_contents` ADD `sticky` DEFAULT 0;

这样的缺点就是多一个没什么用字段,毕竟只有很少的文章需要置顶。而且修改sticky字段麻烦还需要写一个接口来实现。

查询的时候双字段排序就行。

select * from `prefix_contents` order by sticky desc, created desc

法2

把置顶字段信息存到 prefix_fields表。
使用any_value()来防止值不存在。
同样的双字段排序。

select *, any_value(`int_value`) as sticky from `prefix_contents` left outer join `prefix_fields` on `prefix_contents`.`cid` = `prefix_fields`.`cid` group by `prefix_contents`.`cid` order by sticky desc, created desc

法3(推荐)

把使用 case 来生成置顶字段
88,90就是想置顶的文章

select *, case when cid in (88, 90) then 100 else 0 end sticky from xmp_contents xc order by sticky desc,created desc;
您的大名:
万水千山总是情,给个打赏行不行。 打赏
文章出自:虾米皮皮乐 https://xiamp.net/archives/a-way-of-typecho-to-achieve-the-top-of-the-article.html,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
211
Typecho 完美实现文章置顶的思路
05/29
date('Y'); ?>
目前我在Typecho圈里看见的文章置顶实现都是使用两个 Select,第一个Select是查...
扫描右侧二维码阅读全文

发表评论