rengo 2005-9-12 06:21
「額外篩選條件」與「排序方式」詳解(基於Discuz)
[b][size=4]注意:此文章為本章原創,嚴禁任何商業網站轉載,個人網站轉載必須註明出處和原文鏈接,謝謝合作。
前言
很多用戶對DiY-Page編輯器使用中出現的「額外篩選條件」與「排序方式」表示困惑不解,特著此文,以饗讀者。本文可能有錯漏之處,歡迎大家給本文留言,並指正。
在DiY-Page編輯器中,「額外篩選條件」與「排序方式」是兩個重要的項目,是DIYPAGE的DIY能力的主要體現。學會和精通這兩項參數,對於您熟練地使用DIYPAGE,發揮出DIYPAGE的威力,有著重要的意義。
預備知識
一、您應該瞭解SQL語句中的一些判斷字和關鍵字:
等於 =
不等於 != 註:DIYPAGE中請不要使用<>的格式描述「不等於」
大於 >
小於 <
大於等於 >=
小於等於 <=
從小到大的順序 asc
從大到小的順序 desc
二、您應該對DISCUZ的部分重要的數據表結構有一個清楚的瞭解:
(原著:FreeDiscuz版主Freddy,在此表示感謝)
cdb_threads 表:論壇所有主題信息表。
各屬性組介紹
格式:字段名--字段屬性--字段介紹
tid--mediumint(8)--主題的ID
fid--smallint(6)--主題所在版塊的版塊ID
creditsrequire--smallint(6)--需設置多少積分才能瀏覽該主題
iconid--smallint(6)--主題圖標
author--char(15)--主題的會員名稱
authorid--mediumint(8)--主題的會員UID編號
subject--char(80)--主題的標題
dateline--int(10)--發表日期
lastpost--int(10)--最後發表日期
lastposter--char(15)--最後發表的會員名稱
views--mediumint(8)--人氣值(即瀏覽數)
replies--smallint(6)--回複數
displayorder--tinyint(1)--顯示順序
highlight--tinyint(1)--是否為高亮
digest--tinyint(1)--是否為精華貼 還有精華級別 1 2 3
poll--tinyint(1)--是否為投票貼
attachment--tinyint(1)--是否為有附件的主題
closed--mediumint(8)--主題是否關閉。事實上除了關閉以外,當主題被移動,並保留移動標記時,closed中會存放移動後的目標tid。即當>1時,為被移動,=1時為被關閉,=0時普通帖子
cdb_forums 表:論壇版塊信息表
各屬性組介紹
格式:字段名--字段屬性--字段介紹
fid--smallint(6)--版塊的ID
fup--smallint(6)--所在上級版塊的ID
type--enum('group', 'forum', 'sub')--版塊的類型,即:group(分類)、forum(默認版塊)、sub(下級子版)
icon--varchar(50)--版塊圖標
name--varchar(255)--版塊名稱
description--varchar(255)--版塊簡介
status--tinyint(1)--是否在論壇上顯示
displayorder--tinyint(3)--各版塊顯示順序
moderator--varchar(255)--版主名單
styleid--smallint(6)--所用的風格ID
threads--mediumint(8)--共有多少主題的統計
posts--mediumint(8)--共有多少貼子的統計
lastpost--varchar(110)--最後發帖用戶名,發帖時間,標題這三個信息組成的字串
allowsmilies--tinyint(1)--是否允許使用表情\r
allowhtml--tinyint(1)--是否允許使用HTML
allowbbcode--tinyint(1)--是否允許使用Discuz!代碼
allowimgcode--tinyint(1)--是否允許使用IMG代碼
postcredits--tinyint(3)--發新貼加積分的數目
replycredits--tinyint(3)--回復加積分的數目
password--varchar(12)--論壇版塊的訪問密碼
viewperm--varchar(100)--瀏覽版塊許可\r
postperm--varchar(100)--發貼子許可\r
replyperm--varchar(100)--回復主題許可\r
getattachperm--varchar(100)--下載附件許可\r
瞭解完這些信息,您應該記住一些您感興趣的字段的名稱,以及他所代表的意思。
基礎概念
「額外篩選條件」 實際上是SQL語句中的Where Clause部分,即要求查詢的結果必須符合的條件。
額外篩選條件的格式是:字段名 判斷字 值(字符串,即非數字型,請加單引號)
「排序方式」實際上則是SQL語句中的Order Clause部分,即查詢結果的排序方法。
它通常由兩部分組成,即「排序字段」和「正序/倒序」,中間由空格隔開。
正文
第一節 貼子列表中的「額外篩選條件」與「排序方式」
本節請參照之前的cdb_threads表結構說明閱讀。\r
額外篩選條件篇
這裡,我們用實例進行教學:
1、要求顯示的貼子回復大於10條:
replies>10
2、要求顯示的貼子必須是精華貼:
digest>0
3、不能為投票貼
poll=0
4、只顯示用戶名為「Admin」的用戶發表的貼子
author='Admin' 注意:這裡有一個字符串值(即非數字值),要使用單引號括起來;DIYPAGE中請不要使用雙引號
5、顯示回復大於10條的精華貼
replies>10 and digest>0 注意:這裡用了一個「and」關鍵字。不同的條件可以任意組合,只要他們互相不矛盾,都可以用「 and 」來連接,就像英文一樣。
更多字段名,您可以參考前文的cdb_threads表結構說明。
排序方式篇
實例教學:
1、按最後回復時間排序
lastpost desc
2、按最後發表時間排序
dateline desc
3、按主題ID排序
tid asc
註:desc和asc是SQL語句的排序關鍵字,預備知識之已經講過。
更多的字段,您可以參考前文的cdb_threads表結構說明。
第二節 論壇列表中的「額外篩選條件」與「排序方式」
本節請參照之前的cdb_forums表結構說明閱讀。\r
額外篩選條件篇
實例:
1、只顯示有論壇圖標的論壇
icon!=''
2、只顯示指定ID的論壇(如只顯示ID為1、3、5的三個論壇)
fid=1 or fid=3 or fid=5 註:這裡的條件要用「 or 」連接,因為他們是互相矛盾,彼此無法共存的。用此示例的方法,您可以有效地控制首頁上的論壇列表顯示的內容,真正讓首頁的導航符合您的心意。
3、不顯示指定ID的論壇
fid!=1 and fid!=3 and fid!=5 註:這裡的條件要用「 and 」連接,因為他們是必須共存的。用此示例的方法,您可以有效地控制首頁上的論壇列表顯示的內容,隨心所欲地讓您不想顯示的論壇在首頁上消失。
4、顯示指定上級論壇ID(此處為5)的論壇
fup=5
好了,常用的我想就是這些,更多的東西,您還得參考之前的cdb_forums表結構說明。
排序方式篇
實例教學:
1、按論壇ID,順序排列(最common的方式)
fid asc
2、按論壇擁有的貼子數排列
posts desc
更多的東西,還是得說,請您參考之前的cdb_forums表結構說明。[/size][/b]