本Script功能提供瀏覽照片,若您的瀏覽器不支援此項功能,也不影響你閱讀本網站資訊。
:::

快速選單

捐款專區

:::* 瀏覽位置:首頁 > new
  • 字級選擇
  • 大
  • 中
  • 小

new


fffff

  • 發佈日期:2025-12-19
  • 照片說明文字跳至內容
    你說:
    SQL中,如何修改backend_tree_id這數字
    ChatGPT 說:
    在 SQL 裡「修改 backend_tree_id 這個數字」,本質上就是 UPDATE 指令。做法會依你「要改哪一筆/哪幾筆」而不同。下面用最常見情境直接給你範例 👇

    一、修改「某一筆資料」的 backend_tree_id
    👉 依照 主鍵(例如 id) 修改

    UPDATE 表名
    SET backend_tree_id = 5
    WHERE id = 123;
    意思是:
    把 id = 123 這筆資料的 backend_tree_id 改成 5

    ⚠️ 一定要有 WHERE,不然會全表都被改

    二、依條件批次修改
    例如:把目前是 backend_tree_id = 2 的全部改成 3

    UPDATE 表名
    SET backend_tree_id = 3
    WHERE backend_tree_id = 2;
    三、只改某一個欄位為 NULL / 其他值
    改成 NULL
    UPDATE 表名
    SET backend_tree_id = NULL
    WHERE id = 123;
    改成另一個欄位的值
    UPDATE 表名
    SET backend_tree_id = parent_id
    WHERE id = 123;
    四、如果 backend_tree_id 是「樹狀結構」要特別注意
    如果你這個欄位是用在:

    後台選單樹

    分類樹

    parent / child 結構

    ⚠️ 直接改數字可能會造成:

    樹狀結構錯亂

    子節點掛錯父節點

    無限循環(parent 指向自己)

    👉 通常要 連同 parent_id / lft / rgt / depth 一起調整

    五、修改前先確認(強烈建議)
    先用 SELECT 看會影響哪些資料:

    SELECT id, backend_tree_id
    FROM 表名
    WHERE id = 123;


    SELECT COUNT(*)
    FROM 表名
    WHERE backend_tree_id = 2;
    六、如果你願意,我可以「直接幫你寫正確 SQL」
    只要告訴我這 3 件事就好(很重要)👇

    資料庫類型(MySQL / MariaDB / PostgreSQL / SQL Server)

    表名

    backend_tree_id 是

    單純數字欄位?

    還是樹狀結構(後台選單 / 分類)?

    👉 我可以幫你寫 安全、不會搞亂資料的版本

    你說:
    已上傳的圖像
    ChatGPT 說:
    很好,從你貼的畫面可以很清楚判斷 👌
    你用的是 SQL Server(SSMS),資料表是:

    [www.1213.artcom.tw].[dbo].[backend_tree]
    而你要改的是這一欄👇
    👉 backend_tree_id

    一、先用「你現在看到的資料」來解釋結構
    從結果看起來:

    name backend_tree_pid backend_tree_id type
    最新消息 0 12 mainmenu
    活動花絮 0 13 mainmenu
    下載專區 0 14 mainmenu
    判斷重點:
    backend_tree_id:這筆資料自己的 ID

    backend_tree_pid:父層 ID

    0 = 最上層(主選單)

    1 = 掛在「功能管理」底下

    ⚠️ 這不是流水號,是樹狀結構 ID

    二、最安全的修改方式(你現在就能用)
    🔹 範例 1:把「最新消息」的 backend_tree_id 改成 20
    (畫面中是 12)

    UPDATE [www.1213.artcom.tw].[dbo].[backend_tree]
    SET backend_tree_id = 20
    WHERE backend_tree_id = 12;
    ✅ 適合:

    你確定 沒有其他資料的 pid 指向 12

    三、⚠️ 非常重要:有子節點時一定要「一起改」
    如果 有其他資料是這樣:

    backend_tree_pid = 12
    那你 只改 ID 會整個壞掉

    ✅ 正確做法(一起更新)
    例如:

    backend_tree_id : 12 → 20

    子節點的 backend_tree_pid : 12 → 20

    BEGIN TRAN;

    UPDATE [www.1213.artcom.tw].[dbo].[backend_tree]
    SET backend_tree_id = 20
    WHERE backend_tree_id = 12;

    UPDATE [www.1213.artcom.tw].[dbo].[backend_tree]
    SET backend_tree_pid = 20
    WHERE backend_tree_pid = 12;

    COMMIT;
    💡 用 BEGIN TRAN 是為了 避免改壞還能回復

    四、修改前一定要先檢查(非常重要)
    1️⃣ 看有沒有子節點
    SELECT *
    FROM [www.1213.artcom.tw].[dbo].[backend_tree]
    WHERE backend_tree_pid = 12;
    2️⃣ 確認目標 ID 沒人用
    SELECT *
    FROM [www.1213.artcom.tw].[dbo].[backend_tree]
    WHERE backend_tree_id = 20;
    五、⚠️ 不建議你做的事
    ❌ 直接在 SSMS 結果格子裡改數字
    ❌ 重複使用同一個 backend_tree_id
    ❌ 不管 backend_tree_pid 就亂改

    六、我可以「直接幫你算好該怎麼改」
    只要你告訴我這 2 件事 👇
    1️⃣ 你 想改哪一個選單名稱(例如:最新消息)
    2️⃣ 你 想改成多少?還是只是想重新排序?

    我可以幫你寫 完全不會破壞後台選單的 SQL ✅

    你說:
    我要將2014改成12的位置
    ChatGPT 說:
    很好,這句話很關鍵 👍
    👉 「把 2014 改成 12 的位置」
    代表你要做的是 交換位置(ID),不是只單純改一個數字。

    目前你的狀況(從畫面判斷)是:

    2014:name = new

    12:name = 最新消息

    都是 backend_tree_pid = 0(同一層 mainmenu)

    ⚠️ 為什麼不能直接 UPDATE 成 12?
    因為資料表裡 已經存在 backend_tree_id = 12
    如果你直接:

    SET backend_tree_id = 12
    👉 一定會 主鍵/邏輯衝突

    ✅ 正確、安全作法:用「暫時 ID」交換位置
    我們用一個不會撞到的數字(例如 99999)當中繼站

    ✅ 完整 SQL(照貼就能用)
    BEGIN TRAN;

    -- 1️⃣ 先把 2014 暫時改成 99999
    UPDATE [www.1213.artcom.tw].[dbo].[backend_tree]
    SET backend_tree_id = 99999
    WHERE backend_tree_id = 2014;

    -- 2️⃣ 把 12 改成 2014
    UPDATE [www.1213.artcom.tw].[dbo].[backend_tree]
    SET backend_tree_id = 2014
    WHERE backend_tree_id = 12;

    -- 3️⃣ 把 99999 改成 12
    UPDATE [www.1213.artcom.tw].[dbo].[backend_tree]
    SET backend_tree_id = 12
    WHERE backend_tree_id = 99999;

    COMMIT;
    ✅ 執行後效果:

    new → 位置變成 12

    最新消息 → 位置變成 2014

    選單順序成功互換

    ⚠️ 如果「12 或 2014 底下有子選單」
    一定要 連同 pid 一起換(非常重要)

    🔍 先檢查
    SELECT *
    FROM [www.1213.artcom.tw].[dbo].[backend_tree]
    WHERE backend_tree_pid IN (12, 2014);
    ✅ 若有子節點,請用這個「完整版」
    BEGIN TRAN;

    -- 暫存
    UPDATE backend_tree
    SET backend_tree_id = 99999
    WHERE backend_tree_id = 2014;

    UPDATE backend_tree
    SET backend_tree_pid = 99999
    WHERE backend_tree_pid = 2014;

    -- 12 -> 2014
    UPDATE backend_tree
    SET backend_tree_id = 2014
    WHERE backend_tree_id = 12;

    UPDATE backend_tree
    SET backend_tree_pid = 2014
    WHERE backend_tree_pid = 12;

    -- 99999 -> 12
    UPDATE backend_tree
    SET backend_tree_id = 12
    WHERE backend_tree_id = 99999;

    UPDATE backend_tree
    SET backend_tree_pid = 12
    WHERE backend_tree_pid = 99999;

    COMMIT;
    ✅ 做完後一定要確認
    SELECT name, backend_tree_id, backend_tree_pid
    FROM backend_tree
    WHERE backend_tree_id IN (12, 2014);
    如果你願意
    👉 貼出「12、2014 底下是否還有子選單」的查詢結果
    我可以幫你判斷 要不要用完整版,避免後台整個亂掉

    你說:
    再重新來一次,我要將 最新消息a7.aspx 2 1 12 改成2014,將new a7.aspx 1 2014 改成12
    ChatGPT 說:
    好,這次你的需求很明確了,我直接照你給的資料來 ✅
    你要做的是 把兩筆資料的 backend_tree_id 對調。

    目前狀態(依你描述)
    資料 A
    name:最新消息

    url:a7.aspx

    sort:2

    backend_tree_pid:0

    backend_tree_id:12

    資料 B
    name:new

    url:a7.aspx

    sort:1

    backend_tree_pid:0

    backend_tree_id:2014

    👉 目標結果:

    最新消息 → backend_tree_id = 2014

    new → backend_tree_id = 12

    ✅ 正確、安全的 SQL(交換 ID)
    ⚠️ 因為 12 和 2014 都已存在,一定要用暫時 ID

    👉 直接在 SSMS 執行這一段
    BEGIN TRAN;

    -- 1️⃣ 先把 最新消息(12) 暫時改成 99999
    UPDATE [www.1213.artcom.tw].[dbo].[backend_tree]
    SET backend_tree_id = 99999
    WHERE backend_tree_id = 12
    AND name = N'最新消息';

    -- 2️⃣ 把 new 的 2014 改成 12
    UPDATE [www.1213.artcom.tw].[dbo].[backend_tree]
    SET backend_tree_id = 12
    WHERE backend_tree_id = 2014
    AND name = N'new';

    -- 3️⃣ 再把 99999 改成 2014
    UPDATE [www.1213.artcom.tw].[dbo].[backend_tree]
    SET backend_tree_id = 2014
    WHERE backend_tree_id = 99999
    AND name = N'最新消息';

    COMMIT;
    🔒 為什麼我有加 name 條件?
    因為:

    你兩筆 url 都是 a7.aspx

    只靠 backend_tree_id 理論上夠,但
    👉 加上 name 更安全,避免誤改

    ✅ 執行後請立刻確認
    SELECT name, url, sort, backend_tree_pid, backend_tree_id
    FROM [www.1213.artcom.tw].[dbo].[backend_tree]
    WHERE backend_tree_id IN (12, 2014);
    你應該會看到:

    最新消息 → 2014

    new → 12

    ⚠️ 最後再提醒一次(很重要)
    如果 12 或 2014 底下「有子選單」
    (backend_tree_pid = 12 或 2014)

    👉 就要 連 pid 一起換
    如果你不確定,執行這行貼結果給我,我幫你判斷:

    SELECT *
    FROM backend_tree
    WHERE backend_tree_pid IN (12, 2014);
    我可以幫你 100% 確認不會把後台選單弄壞 👍

    你說:
    要怎麼寫?
    ChatGPT 說:
    好,這題我直接用**「你照抄就能用」**的方式教你,不囉嗦 👍
    你現在是在 SQL Server / SSMS,對吧。

    🎯 你要做的事情(白話)
    把這兩筆 互換 backend_tree_id:

    name backend_tree_id
    最新消息 12 → 2014
    new 2014 → 12
    ✅ 正確寫法(一步到位,直接貼上執行)
    BEGIN TRAN;

    -- 1️⃣ 最新消息:12 → 99999(暫時)
    UPDATE backend_tree
    SET backend_tree_id = 99999
    WHERE name = N'最新消息'
    AND backend_tree_id = 12;

    -- 2️⃣ new:2014 → 12
    UPDATE backend_tree
    SET backend_tree_id = 12
    WHERE name = N'new'
    AND backend_tree_id = 2014;

    -- 3️⃣ 最新消息:99999 → 2014
    UPDATE backend_tree
    SET backend_tree_id = 2014
    WHERE name = N'最新消息'
    AND backend_tree_id = 99999;

    COMMIT;
    🔍 執行完馬上確認(一定要做)
    SELECT name, url, sort, backend_tree_pid, backend_tree_id
    FROM backend_tree
    WHERE name IN (N'最新消息', N'new');
    你看到的結果應該是:

    最新消息 → 2014

    new → 12

    ⚠️ 如果出現錯誤怎麼辦?
    還沒 COMMIT 前可以回復
    ROLLBACK;
    (但你照上面順序執行,基本不會出事)

    ❗重要提醒(一定要看)
    如果這兩筆 底下還有子選單
    (backend_tree_pid = 12 或 2014)

    👉 請先停下來,貼這個查詢結果給我:

    SELECT *
    FROM backend_tree
    WHERE backend_tree_pid IN (12, 2014);
    我會幫你改成「父子一起換」的安全版,不會讓後台壞掉 👍




    未選擇任何檔案未選擇任何檔案
    ChatGPT 可能會出錯。請查核重要資訊。
  • 分享
*回上一頁 *到最上面