Admin

Cho đi là còn mãi
Thành viên BQT
72 ❤︎ Bài viết: 1056 Tìm chủ đề
Đọc: 4,743 Tìm: 0
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]');
 

Những người đang xem chủ đề này

Xu hướng nội dung

Back