首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

DedeCMS (織夢) 二次開發實戰:SQL 標籤與常用功能型/調用型 SQL 語句大全

     編輯:關於SqlServer

DedeCMS SQL 標籤基礎

模板中執行任意 SELECT 查詢並循環輸出:


{dede:sql sql="SELECT * FROM dede_archives WHERE mid=1 LIMIT 10"}
    [field:title/]
{/dede:sql}
  • sql 屬性:完整 SQL 查詢 (僅支援 SELECT,不可寫 INSERT/UPDATE/DELETE)。
  • 底層模板欄位:`[field:欄位名/]` 對應查詢結果集欄位。
  • 支援分頁:`LIMIT 0,10` (MySQL 語法),DedeCMS 內部用 MySQL。

資料庫結構速查 (核心表)

功能型 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. 批量修改發布/排序/入庫時間 (同步為指定時間)

  1. 後台新增一篇文檔,記下其 `pubdate`/`senddate`/`sortrank` 值 (如 `1703040000`)。
  2. 執行:

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/] [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 格式化參數

    表名用途關鍵欄位
    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
    格式字串輸出範例
    '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日
    1. 上一篇文章:
    2. 下一篇文章:
    Copyright © 程式碼之家 All Rights Reserved