Tutorial 2x Delete private conversations in bulk - Xóa hàng loạt cuộc trò chuyện riêng tư XenForo 2

PVS

Super Moderator
Thành viên BQT
Tham gia
28/02/2015
Bài viết
17,128
Được Like
12,743
Delete private conversations in bulk - Xóa hàng loạt cuộc trò chuyện riêng tư XenForo 2

Cảnh báo!


Nếu bạn không cảm thấy thoải mái khi sử dụng MySQL, truy vấn cơ sở dữ liệu trực tiếp hoặc không có kỹ năng SQL, tốt nhất bạn không nên thử những gì mô tả trong hướng dẫn này. Bạn có thể làm hỏng các cuộc trò chuyện của diễn đàn hoặc thậm chí tệ hơn, làm hỏng dữ liệu đến mức diễn đàn của bạn có thể không sử dụng được. Nếu bạn tiếp tục, ít nhất hãy tạo một bản sao lưu cơ sở dữ liệu của bạn!


Làm thế nào nó hoạt động.

Hệ thống cuộc trò chuyện riêng tư XenForo sử dụng bốn bảng cơ sở dữ liệu: xf_conversation_master, xf_conversation_message, xf_conversation_recipientxf_conversation_user. Để loại bỏ một thông báo, yêu cầu thay đổi đối với tất cả bốn bảng. Do tên gọi của nó, xf_conversation_master là trung tâm chính mà tất cả các cuộc trò chuyện riêng tư kết nối với nhau và cột conversation_id trong bảng đó là cột mà chúng ta sẽ dựa trên các hoạt động của mình. Bằng cách sử dụng dữ liệu từ bảng đó, chúng ta có thể tạo các truy vấn sẽ loại bỏ các cuộc trò chuyện riêng tư không mong muốn.

Công tác chuẩn bị.

Như với bất kỳ thao tác nào trên cơ sở dữ liệu, sẽ có ba đề xuất được đưa ra. Đầu tiên, đóng diễn đàn của bạn. Thứ hai, sao lưu cơ sở dữ liệu của bạn. Hoặc nếu không, ít nhất hãy tạo bản sao lưu của bốn bảng này trước khi thay đổi bất cứ điều gì. Thứ ba, chạy các truy vấn SELECT trước để đảm bảo rằng bạn đang loại bỏ dữ liệu chính xác.

Truy vấn đầu tiên của chúng ta sẽ tìm thấy các cuộc trò chuyện không mong muốn hay đúng hơn là các ID cuộc trò chuyện mà chúng ta có trong bảng chính. Những gì bạn cần có trong tay là tiêu đề của các cuộc trò chuyện không mong muốn và ID người dùng của thành viên đã gửi chúng.

Trong ví dụ này, Unwanted Message! sẽ là tiêu đề cuộc trò chuyện của chúng ta và ID người dùng của người bắt đầu cuộc trò chuyện sẽ là 2225. Đương nhiên, bạn sẽ thay thế cả hai điều này bằng tiêu đề cuộc trò chuyện và người bắt đầu cuộc trò chuyện.

SQL:
SELECT *
FROM xf_conversation_master
WHERE title = 'Unwanted Message!'
AND user_id = 2225;

Điều này sẽ cung cấp cho bạn những gì bạn đang tìm kiếm. Lưu ý số hàng mà truy vấn trả về. Quét qua kết quả để chắc chắn rằng bạn đã trả lại đúng tin nhắn. Ví dụ: nếu chúng được gửi hàng loạt, bạn sẽ thấy rằng các dấu thời gian trong cột start_date đều phải nằm trong một phạm vi rất hẹp.

Nếu bạn không nhận được kết quả mong muốn, hãy điều chỉnh truy vấn này cho đến khi bạn nhận được kết quả mong muốn. Với một sửa đổi, truy vấn này sẽ trả về kết quả cột conversation_id dưới dạng danh sách mà các truy vấn khác sẽ sử dụng để xóa các cuộc trò chuyện phù hợp.

Khi bạn đã xác nhận kết quả của mình từ truy vấn này, hãy kiểm tra thêm một chút với nhiều truy vấn hơn.

SQL:
SELECT *
FROM xf_conversation_recipient
WHERE conversation_id
IN
(
SELECT mstr.conversation_id
FROM xf_conversation_master AS mstr
WHERE title = 'Unwanted Message!'
AND user_id = 2225
);

SQL:
SELECT *
FROM xf_conversation_user
WHERE conversation_id
IN
(
SELECT mstr.conversation_id
FROM xf_conversation_master AS mstr
WHERE title = 'Unwanted Message!'
AND user_id = 2225
);

SQL:
SELECT *
FROM xf_conversation_message
WHERE conversation_id
IN
(
SELECT mstr.conversation_id
FROM xf_conversation_master AS mstr
WHERE title = 'Unwanted Message!'
AND user_id = 2225
);

Như trên, hãy đảm bảo rằng tất cả những điều này đều trả về kết quả chính xác. Kiểm tra, kiểm tra và kiểm tra thêm nếu bạn không cảm thấy thoải mái với kết quả. Truy vấn SELECT là an toàn; Các truy vấn DELETE có thể gây ra thiệt hại nghiêm trọng!


Hãy xóa!

Bây giờ mọi thứ đã được xác minh, hãy hít thở sâu và bắt đầu xóa những cuộc trò chuyện đó.

Chạy ba truy vấn này trước.
SQL:
DELETE
FROM xf_conversation_recipient
WHERE conversation_id
IN
(
SELECT mstr.conversation_id
FROM xf_conversation_master AS mstr
WHERE title = 'Unwanted Message!'
AND user_id = 2225
);

SQL:
DELETE
FROM xf_conversation_user
WHERE conversation_id
IN
(
SELECT mstr.conversation_id
FROM xf_conversation_master AS mstr
WHERE title = 'Unwanted Message!'
AND user_id = 2225
);

SQL:
DELETE
FROM xf_conversation_message
WHERE conversation_id
IN
(
SELECT mstr.conversation_id
FROM xf_conversation_master AS mstr
WHERE title = 'Unwanted Message!'
AND user_id = 2225
);

Bước cuối cùng, chạy truy vấn này:
SQL:
DELETE
FROM xf_conversation_master
WHERE title = 'Unwanted Message!'
AND user_id = 2225;

Tinh chỉnh

Giới hạn kết quả dựa trên ngày/giờ.


Nếu bạn thấy rằng bạn đang trả lại một vài tin nhắn bổ sung, hãy kiểm tra lại cột start_date. Nếu đó là một tin nhắn hàng loạt, các tin nhắn lạc có thể là các cuộc trò chuyện đã bắt đầu trước đó một thời gian hoặc gần đây hơn so với tin nhắn hàng loạt, vì vậy bạn có thể bao gồm một phạm vi trong truy vấn của mình:
SQL:
SELECT *
FROM xf_conversation_master
WHERE title = 'Unwanted Message!'
AND user_id = 2225
AND start_date BETWEEN 1607441207 and 1607442924;

XenForo sử dụng timestamp Unix - nếu bạn muốn kiểm tra kỹ ngày tháng của mình, bạn có thể tìm thấy bộ chuyển đổi timestamp thông qua tìm kiếm trên Internet.


Giới hạn kết quả dựa trên trả lời.

Có thể có trường hợp một số ít tin nhắn đã được trả lời và có lẽ người gửi không muốn loại bỏ chúng. Một cột được gọi là reply_count có thể đạt được điều này cho chúng ta - bất kỳ giá trị nào lớn hơn 0 cho biết rằng cuộc trò chuyện đã có phản hồi.
SQL:
SELECT *
FROM xf_conversation_master
WHERE title = 'Unwanted Message!'
AND user_id = 2225
AND reply_count > 0;

Một lần nữa, điều hiển nhiên - hãy kiểm tra và kiểm tra lại bất kỳ truy vấn nào bạn tạo trước khi đưa ra truy vấn DELETE trên các bảng của bạn! Và bạn đã sao lưu dữ liệu của mình, phải không?

Tác giả của hướng dẫn này không bảo đảm về việc áp dụng, khả năng sử dụng hoặc an toàn của các quy trình được nêu ở đây. Sử dụng có nguy cơ của riêng bạn. Sửa đổi dữ liệu XenForo là một hoạt động vốn có rủi ro. Và bạn đã sao lưu dữ liệu của mình ... đúng không?

Chúc các bạn thành công.


Nguồn: xenforo.com​
 
  • Like
Reactions: THB

Top Bottom