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

Ryan

2020-05-29/3 评论/355 浏览

目前我在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,版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。
3 条评论
355 浏览
您的大名:
万水千山总是情,给个打赏行不行。 打赏

发表评论

;-) :| :smile: :sad: :razz: :oops: :sup: :lol: :grin: :cry: :cool: :???:

已有 3 条评论

  1. jclser 路过 Windows 7 x64 Edition / Google Chrome 80.0.3987.132 2020-09-08 21:40

    结果还是要增加字段吗。。其实你说的那个BUG也是有解决方法的,$this->parameter->pageSize就是。

    1. Ryan 管理 Windows 10 x64 Edition / Firefox 79.0 2020-09-08 21:43

      法3不用加字段啊

    2. Ryan 管理 Windows 10 x64 Edition / Firefox 79.0 2020-09-08 21:43

      直接设置$this->parameter->pageSize会丢文章,有多少置顶丢多少

虾米皮皮乐

Ryan

版权申明:收费资源由本站发布,用户购买后只有终端使用权,禁止转售和转载

暂无附件
Typecho 完美实现文章置顶的思路
05/29
2020
目前我在Typecho圈里看见的文章置顶实现都是使用两个 Select,第一个Select是查...
扫描右侧二维码阅读全文