Hướng Dẫn Thay Thế Hàng Loạt Trong Xenforo 2

Thảo luận trong 'Web' bắt đầu bởi Admin, 15 Tháng tám 2025.

  1. Admin

    Admin Cho đi là còn mãi Thành viên BQT

    Bài viết:
    Tìm chủ đề
    1,080
    Tôi muốn thay thế hàng loạt trong diễn đàn Xenforo ví dụ thẻ [credits=50;1441754192473]thành [CHARGE=50]thì làm thế nào?

    Code đơn giản:

    PHP:
    UPDATE xf_post
    SET message 
    REPLACE(message'[/credits]''[/CHARGE]')
    WHERE message LIKE '%[/credits]%';
    Sử dụng Regex:

    PHP:
    UPDATE xf_post
    SET message 
    REGEXP_REPLACE(message'\\[credits=([0-9]+);[0-9]+\\]''[CHARGE=\\1]')
    WHERE message REGEXP '\\[credits=([0-9]+);[0-9]+\\]';
    Bạn có thể làm thay thế hàng loạt trong phpMyAdmin bằng câu lệnh SQL UPDATE + REPLACE ()

    Ví dụ với yêu cầu của bạn:

    Giả sử:

    • Bảng: My_table
    • Cột chứa dữ liệu: My_column

    Nếu bạn chỉ muốn thay toàn bộ [credits=50;1441754192473]thành [CHARGE=50](nguyên chuỗi, không thay đổi linh hoạt), thì:

    PHP:
    UPDATE my_table
    SET my_column 
    REPLACE(my_column'[credits=50;1441754192473]''[CHARGE=50]');
    Nếu bạn muốn thay mọi chuỗi dạng [credits=50;SỐ_BẤT_KỲ] thành [CHARGE=50], thì MySQL mặc định không hỗ trợ regex replace trực tiếp trong UPDATE. Bạn sẽ cần:

    1. Dùng hàm REGEXP_REPLACE() (nếu MySQL ≥ 8.0):
    PHP:
    UPDATE my_table
    SET my_column 
    REGEXP_REPLACE(my_column'\\[credits=50;[0-9]+\\]''[CHARGE=50]');
    1. Nếu MySQL < 8.0 (phpMyAdmin nhiều host vẫn là 5.x), bạn phải xuất dữ liệu ra, dùng regex replace trong một trình soạn thảo (VD Notepad++, Sublime Text) rồi import lại, hoặc viết script PHP để replace.
    Lưu ý an toàn:

    • Nên backup database trước khi chạy lệnh.

    • Nên chạy thử SELECT trước để kiểm tra kết quả:
    PHP:
    SELECT my_column,
          
    REGEXP_REPLACE(my_column'\\[credits=50;[0-9]+\\]''[CHARGE=50]') AS new_column
    FROM my_table
    WHERE my_column REGEXP 
    '\\[credits=50;[0-9]+\\]';
    Ví dụ cụ thể:

    [credits=123;4567890]→ [CHARGE=123]

    PHP:
    UPDATE my_table
    SET my_column 
    REGEXP_REPLACE(my_column'\\[credits=([0-9]+);[0-9]+\\]''[CHARGE=\\1]');
     

Chia sẻ trang này

Đang tải...