| 表名 | 用途 | 關鍵欄位 |
dede_archives | 文檔主表 | id, typeid, title, writer, source, pubdate, senddate, mid, flag, litpic, arcrank |
dede_arctiny | 文檔精簡表 (列表頁高速查詢) | id, typeid, title, mid, arcrank, senddate |
dede_addonarticle | 普通文章內容表 | aid, typeid, body |
dede_arctype | 欄目表 | id, typename, topid, isdefault, ispart, namerule |
dede_member | 會員表 | mid, userid, uname, email, scores, money |
dede_feedback | 評論/留言表 | id, aid, ip, username, msg, dtime |
dede_arcatt | 文檔屬性定義 (flag 對應) | att, attname, sortid |
功能型 SQL (後台「SQL 命令運行工具」執行)
1. 新增自定義屬性 (Flag)
INSERT INTO `dede_arcatt` (sortid, att, attname) VALUES (9, 'd', '評論');
ALTER TABLE `dede_archives` MODIFY `flag` SET ('c','h','p','f','s','j','a','b','d') DEFAULT NULL;
2. 批量賦值作者/來源 (空值填充)
UPDATE `dede_archives` SET writer='預設作者' WHERE writer='';
UPDATE `dede_archives` SET source='本站' WHERE source='';
3. 刪除指定 IP 的垃圾評論
DELETE FROM `dede_feedback` WHERE `ip` = '203.45.67.89';
4. 清空所有文檔關鍵字
UPDATE `dede_archives` SET keywords='';
5. 批量修改發布/排序/入庫時間 (同步為指定時間)
- 後台新增一篇文檔,記下其 `pubdate`/`senddate`/`sortrank` 值 (如 `1703040000`)。
- 執行:
UPDATE `dede_archives` SET `pubdate` = 1703040000;
UPDATE `dede_archives` SET `senddate` = 1703040000;
UPDATE `dede_archives` SET `sortrank` = 1703040000;
6. 批量設定欄目為動態/靜態
-- 動態瀏覽
UPDATE `dede_arctype` SET `isdefault` = -1;
-- 靜態生成
UPDATE `dede_arctype` SET `isdefault` = 1;
調用型 SQL (模板標籤 {dede:sql} 使用)
1. 調用指定會員發布的最新文章
{dede:sql sql="SELECT a.id, a.title, a.pubdate FROM dede_archives a WHERE a.mid=5 ORDER BY a.pubdate DESC LIMIT 10"}
[field:title/] [field:pubdate function="MyDate('Y-m-d',@me)"/]
{/dede:sql}
2. 調用當前欄目下置頂文章 (flag 含 'c')
{dede:sql sql="SELECT id, title FROM dede_archives WHERE typeid=~typeid~ AND FIND_IN_SET('c', flag) LIMIT 5"}
[field:title/]
{/dede:sql}
3. 多表關聯:調用文章含縮圖、欄目連結
{dede:sql sql="SELECT a.id, a.title, a.litpic, a.typeid, t.typename, t.typedir
FROM dede_archives a
INNER JOIN dede_arctype t ON a.typeid = t.id
WHERE a.arcrank > -1 AND a.typeid = ~typeid~
ORDER BY a.pubdate DESC LIMIT 10"}
[field:title/]
{/dede:sql}
進階技巧與注意事項
- 防注入:標籤參數 `~typeid~`、`~aid~` 等由系統自動過濾,但自行拼接 SQL 字串時**必須手工過濾**或使用參數化 (DedeCMS 內核較舊,建議自行 `addslashes`)。
- 效能**:避免在模板標籤中執行複雜 JOIN/子查詢。大數據量請改寫為 **PHP 自定義標籤** 或 **獨立頁面 + AJAX 載入**。
- 時間戳轉換**:DedeCMS 存 `INT` Unix Timestamp,模板用 `
function="MyDate('Y-m-d H:i',@me)"` 格式化。
- 分頁**:`
{dede:sql sql="... LIMIT 0,20"}` 不支援自動分頁,需配合 `{dede:pagelist}` 或自行實作。
- 緩存**:生成靜態頁後 SQL 標籤不再執行;動態瀏覽模式下每請求執行一次,高流量頁建議啟用模板緩存或改靜態。
常用 MyDate 格式化參數
| 格式字串 | 輸出範例 |
'Y-m-d' | 2024-05-20 |
'Y-m-d H:i:s' | 2024-05-20 14:30:45 |
'm-d' | 05-20 |
'Y年m月d日' | 2024年05月20日 |
- 上一篇文章: Access / SQL Server 自動編號 (Identity/AutoNumber) 種子、步長設定與重置完整語法
- 下一篇文章: SQL 進階技巧精選:8 大實用語句模式速查表
Copyright ©
程式碼之家 All Rights Reserved