dede sql orderby如何正确使用?

99ANYc3cd6
预计阅读时长 12 分钟
位置: 首页 DEDE建站 正文

orderby 是 DedeCMS 中一个非常重要且常用的参数,它主要用于 对数据库查询结果进行排序,它通常与 row(返回结果数量)、col(列数)等参数一起,在列表标签(如 {dede:arclist}{dede:channelartlist})和循环标签(如 {dede:loop})中使用。

dede sql orderby
(图片来源网络,侵删)

orderby 的基本语法

orderby 参数通常放在标签的属性中,格式如下:

{dede:arclist row='10' orderby='排序方式'}
    <li>
        <a href='[field:arcurl/]'>[field:title/]</a>
        <span>[field:pubdate function="MyDate('Y-m-d',@me)"/]</span>
    </li>
{/dede:arclist}

这里的 orderby='排序方式' 就是核心。排序方式 可以是预定义的关键字,也可以是自定义的 SQL 片段。


常用预定义排序方式

DedeCMS 内置了一些非常方便的排序关键字,你无需编写复杂的 SQL 即可实现常用排序。

排序方式 (关键字) 说明 示例
sort 默认值,按文章排序值排序(后台“常规选项”中设置的“排序”字段)。 orderby='sort'
hotclick 按点击数(浏览量)从高到低排序。 orderby='hot'
pubdate 按发布日期从新到旧排序(降序)。 orderby='pubdate'
pubdateasc 按发布日期从旧到新排序(升序)。 orderby='pubdateasc'
id 按文章 ID 从大到小排序(降序)。 orderby='id'
idasc 按文章 ID 从小到大排序(升序)。 orderby='idasc'
lastpost 按最后评论时间排序。 orderby='lastpost'
scores 按文章得分(如顶踩数)排序。 orderby='scores'
rand 随机排序,每次刷新页面,文章顺序都会打乱。 orderby='rand'

示例:获取点击量最高的 5 篇文章

{dede:arclist row='5' orderby='click'}
    <a href="[field:arcurl/]">[field:title/]</a> (点击: [field:click/])
{/dede:arclist}

自定义 SQL 排序(高级用法)

当预定义的排序方式无法满足你的需求时(按某个自定义字段排序),你可以使用自定义的 SQL 片段。

dede sql orderby
(图片来源网络,侵删)

语法: orderby='自定义SQL片段'

注意:

  • 你不需要写 ORDER BY 关键字,标签会自动加上。
  • 直接写排序的字段名或表达式即可。
  • 默认是降序(DESC),如果需要升序(ASC),必须在字段名后加上 asc

示例 1:按自定义字段 price 从高到低排序

假设你给文章添加了一个自定义字段 price(价格),并且字段名为 price

{dede:arclist row='10' orderby='price'}
    <a href="[field:arcurl/]">[field:title/]</a> - 价格: [field:price/]
{/dede:arclist}

这会生成类似 ORDER BY price DESC 的 SQL 语句。

dede sql orderby
(图片来源网络,侵删)

示例 2:按自定义字段 price 从低到高排序

{dede:arclist row='10' orderby='price asc'}
    <a href="[field:arcurl/]">[field:title/]</a> - 价格: [field:price/]
{/dede:arclist}

这会生成类似 ORDER BY price ASC 的 SQL 语句。

示例 3:按多个字段排序(先按 sort,再按 pubdate

{dede:arclist row='10' orderby='sort,pubdate desc'}
    ...
{/dede:arclist}

这会生成类似 ORDER BY sort ASC, pubdate DESC 的 SQL 语句,注意多个排序字段之间用英文逗号 隔开。


{dede:sql} 标签中使用 orderby

{dede:sql} 标签用于直接执行自定义的 SQL 查询,在这种情况下,orderby 的用法略有不同,因为它需要包含完整的 ORDER BY 子句。

语法:sql 属性中直接编写完整的 ORDER BY 语句。

示例:查询 dede_archives 表中点击量最高的 10 篇文章

{dede:sql sql="SELECT title,click FROM dede_archives ORDER BY click DESC LIMIT 0, 10"}
    <li>
        <a href="#">[field:title/]</a> (点击: [field:click/])
    </li>
{/dede:sql}

注意对比:

  • {dede:arclist} 中,你只写 orderby='click'
  • {dede:sql} 中,你必须写完整的 sql="... ORDER BY click DESC ..."

总结与最佳实践

  1. 优先使用预定义关键字:对于常规需求(如按时间、点击量排序),直接使用 pubdateclick 等关键字,简单高效。
  2. 自定义字段排序:当需要按文章模型中的自定义字段(如价格、销量、作者等)排序时,使用 orderby='字段名'orderby='字段名 asc'
  3. 随机排序orderby='rand' 适用于实现“随机推荐”等功能,但请注意,在数据量大的表上使用 ORDER BY RAND() 可能会影响性能。
  4. 区分标签用法:牢记在 {dede:arclist} 等列表标签和 {dede:sql} 标签中 orderby 的用法是不同的,后者需要写完整的 SQL 语句。
  5. 性能考虑:复杂的排序(尤其是多表连接后的排序)可能会对数据库造成较大压力,应尽量避免在数据量巨大的表上进行不必要的复杂排序。

希望这份详细的解释能帮助你完全掌握 DedeCMS 中 orderby 的使用!

-- 展开阅读全文 --
头像
织梦cms模板建站的优缺点
« 上一篇 2025-12-28
dede仿站需要买dede版权吗
下一篇 » 2025-12-28

相关文章

取消
微信二维码
支付宝二维码

目录[+]