- Xu
- 753,531,087
974
0
Dành cho những forum nào lỡ bật chế độ kiểm duyệt thành viên mới, sau một thời gian số lượng thành viên đăng ký đông nhìn cái bảng duyệt rất khó chịu thì các bạn có thể duyệt hàng loạt thông qua PHPmyadmin như sau:
Trong XenForo, user thường phải được approve (duyệt) khi đăng ký nếu diễn đàn bật chế độ kiểm duyệt. Trạng thái này được lưu trong bảng xf_user với cột user_state.
Các trạng thái phổ biến:
Valid → tài khoản đã được duyệt
Moderated → chờ duyệt
Email_confirm → chưa xác nhận email
Disabled → bị khóa
Nếu muốn duyệt hàng loạt user đang chờ duyệt, bạn có thể dùng SQL sau:
Nếu muốn duyệt tất cả user chưa xác nhận email hoặc đang chờ duyệt:
Nếu chỉ muốn duyệt một nhóm user cụ thể - ví dụ ID > 1000:
Lưu ý trước khi chạy:
Nên backup database trước.
Sau khi update có thể cần rebuild cache trong AdminCP để đồng bộ.
Trong XenForo 2, danh sách "Users Awaiting Approval" trong AdminCP không chỉ dựa vào cột user_state của bảng xf_user. Nó còn lưu queue kiểm duyệt trong bảng xf_approval_queue. Vì vậy bạn đổi user_state = 'valid' rồi nhưng user vẫn nằm trong hàng chờ duyệt.
Bạn cần làm thêm bước xóa khỏi bảng approval queue.
Câu lệnh SQL đầy đủ:
Sau đó chạy tiếp:
Nếu muốn chắc chắn hơn - duyệt đúng những user vừa sửa:
Sau khi chạy xong:
Vào AdminCP → Tools → Rebuild caches
Hoặc chạy CLI:
Php cmd. Php xf: Rebuild-caches
Lúc đó danh sách Users awaiting approval sẽ biến mất.
Duyệt 10.000 user một lần cho nhẹ server
Để duyệt 10.000 user mỗi lần cho nhẹ server trong database của XenForo 2, bạn nên dùng LIMIT để update theo từng batch.
Câu lệnh duyệt 10.000 user:
Sau đó xóa queue kiểm duyệt tương ứng:
Cách làm đúng để tránh nặng database:
Chạy lệnh UPDATE 10.000 user.
Chạy lệnh DELETE 10.000 approval queue.
Lặp lại vài lần cho tới khi hết user chờ duyệt.
Nếu muốn an toàn hơn (chuẩn theo user_id) để tránh xóa nhầm queue:
Một cách tốt hơn nữa cho forum có hàng trăm nghìn user là duyệt theo user_id:
Sau đó chạy tiếp:
10001 → 20000
20001 → 30000
Cách này nhẹ server hơn nhiều vì MySQL không phải scan toàn bảng.
Trong XenForo, user thường phải được approve (duyệt) khi đăng ký nếu diễn đàn bật chế độ kiểm duyệt. Trạng thái này được lưu trong bảng xf_user với cột user_state.
Các trạng thái phổ biến:
Valid → tài khoản đã được duyệt
Moderated → chờ duyệt
Email_confirm → chưa xác nhận email
Disabled → bị khóa
Nếu muốn duyệt hàng loạt user đang chờ duyệt, bạn có thể dùng SQL sau:
SQL:
UPDATE xf_user
SET user_state = 'valid'
WHERE user_state = 'moderated';
Nếu muốn duyệt tất cả user chưa xác nhận email hoặc đang chờ duyệt:
SQL:
UPDATE xf_user
SET user_state = 'valid'
WHERE user_state IN ('moderated', 'email_confirm') ;
Nếu chỉ muốn duyệt một nhóm user cụ thể - ví dụ ID > 1000:
SQL:
UPDATE xf_user
SET user_state = 'valid'
WHERE user_state = 'moderated'
AND user_id > 1000;
Lưu ý trước khi chạy:
Nên backup database trước.
Sau khi update có thể cần rebuild cache trong AdminCP để đồng bộ.
Trong XenForo 2, danh sách "Users Awaiting Approval" trong AdminCP không chỉ dựa vào cột user_state của bảng xf_user. Nó còn lưu queue kiểm duyệt trong bảng xf_approval_queue. Vì vậy bạn đổi user_state = 'valid' rồi nhưng user vẫn nằm trong hàng chờ duyệt.
Bạn cần làm thêm bước xóa khỏi bảng approval queue.
Câu lệnh SQL đầy đủ:
SQL:
UPDATE xf_user
SET user_state = 'valid'
WHERE user_state = 'moderated';
Sau đó chạy tiếp:
Mã:
DELETE FROM xf_approval_queue
WHERE content_type = 'user';
Nếu muốn chắc chắn hơn - duyệt đúng những user vừa sửa:
SQL:
DELETE aq
FROM xf_approval_queue aq
JOIN xf_user u ON u.user_id = aq.content_id
WHERE aq.content_type = 'user'
AND u.user_state = 'valid';
Sau khi chạy xong:
Vào AdminCP → Tools → Rebuild caches
Hoặc chạy CLI:
Php cmd. Php xf: Rebuild-caches
Lúc đó danh sách Users awaiting approval sẽ biến mất.
Duyệt 10.000 user một lần cho nhẹ server
Để duyệt 10.000 user mỗi lần cho nhẹ server trong database của XenForo 2, bạn nên dùng LIMIT để update theo từng batch.
Câu lệnh duyệt 10.000 user:
SQL:
UPDATE xf_user
SET user_state = 'valid'
WHERE user_state = 'moderated'
LIMIT 10000;
Sau đó xóa queue kiểm duyệt tương ứng:
SQL:
DELETE FROM xf_approval_queue
WHERE content_type = 'user'
LIMIT 10000;
Cách làm đúng để tránh nặng database:
Chạy lệnh UPDATE 10.000 user.
Chạy lệnh DELETE 10.000 approval queue.
Lặp lại vài lần cho tới khi hết user chờ duyệt.
Nếu muốn an toàn hơn (chuẩn theo user_id) để tránh xóa nhầm queue:
SQL:
DELETE aq
FROM xf_approval_queue aq
JOIN xf_user u ON u.user_id = aq.content_id
WHERE aq.content_type = 'user'
AND u.user_state = 'valid'
LIMIT 10000;
Một cách tốt hơn nữa cho forum có hàng trăm nghìn user là duyệt theo user_id:
SQL:
UPDATE xf_user
SET user_state = 'valid'
WHERE user_state = 'moderated'
AND user_id BETWEEN 1 AND 10000;
Sau đó chạy tiếp:
10001 → 20000
20001 → 30000
Cách này nhẹ server hơn nhiều vì MySQL không phải scan toàn bảng.
Chỉnh sửa cuối:

