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:
Sử dụng Regex:
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ử:
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ì:
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:
Ví dụ cụ thể:
[credits=123;4567890]→ [CHARGE=123]
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:
- 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]');
- 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.
- 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]');
