Xóa bài viết SQL

Thảo luận trong 'Thư viện' bắt đầu bởi Admin, 15/9/17.

388

  1. Admin Administrator

    Diễn đàn xenforo của bạn đang bị spam nặng? Bạn đang phải dùng công cụ spam cleaner để xóa các bài spam? Các chủ đề (threads), bài viết (posts) này chỉ được xóa tạm khỏi diễn đàn dưới dạng không được hiển thị nhưng thực tế chúng vẫn tồn tại trong database và tiêu tốn một lượng tài nguyên nhất định? Vậy làm thế nào để xóa vĩnh viễn những bài viết và chủ đề bị xóa tạm này khỏi cơ sở dữ liệu một cách nhanh nhất? Sau đây mình xin hướng dẫn các bạn xử lý vấn đề này bằng một số truy vấn trong phpmyadmin.

    Các bạn làm như sau:
    Các bài viết bị xóa tạm sẽ được thay đổi `discussion_state` từ 'visible' sang 'deleted' trong cơ sở dữ liệu. Chúng ta vào phpmyadmin, chọn database Xenforo, tìm đến table xf_thread, chuyển qua thẻ SQL và thực hiện các câu truy vấn sau:
    Chọn các threads đã bị xóa tạm:
    Mã:
    SELECT * FROM `xf_thread` WHERE `discussion_state`='deleted'
    Xóa các threads đã bị xóa tạm:
    Mã:
    DELETE FROM `xf_thread` WHERE `discussion_state`='deleted'
    Tương tự các bài viết (posts) bị xóa tạm sẽ được thay đổi `message_state` từ 'visible' sang 'deleted' trong cơ sở dữ liệu.
    Chọn các posts đã bị xóa tạm:

    Mã:
    SELECT * FROM `xf_post` WHERE `message_state`='deleted'
    Xóa các posts đã bị xóa tạm:
    Mã:
    DELETE FROM `xf_post` WHERE `message_state`='deleted'



    Có 1 điều khá nhức nhối đối với diễn đàn Xenforo đó là thành viên chỉ có thể xóa bài viết của mình ở dạng tạm thời (unpublic), nghĩa là bài viết đó mặc dù bị xóa nhưng thực chất nó vẫn còn tồn tại, và chỉ có admin và mod thấy được. Và ngày qua ngày, số lượng bài viết unpublic đó ngày càng nhiều và nó sẽ khiến database chứa thêm 1 lượng rác thải vô ích. Vậy làm sao để có thể xử lý nhanh gọn số rác thải này?


    Hôm nay mình xin hướng dẫn một số câu query trong phpmyadmin rất có ích khi muốn control với toàn bộ bài post và topic của thành viên hay toàn bộ diễn đàn. Đây là các chức năng Xenforo thiếu và chưa có.

    Ở đây ta sẽ control các bài viết đã bị member xóa dưới dạng unpublic để xóa hẳn hay phục hồi. Các bạn chú ý các câu query này rất dễ và không phức tạp gì cả, nhưng lần đầu làm thì nên làm thử ở localhost hay backup trước khi Delete hay Update , còn Select thì ko sao.

    Việc đầu tiên các bạn cần vào phpmyadmin, sau đó vào database Xenforo của bạn, rồi chọn table xf_post và chọn tab SQL như sau:

    [​IMG]
    Sau đó, tùy vào nhu cầu của bạn có thể chọn các câu query dưới đây để áp dụng.

    1. Toàn bộ bài viết đã bị thành viên xóa dưới dạng unpublic

    Tìm toàn bộ

    Mã:
    SELECT * FROM xf_post
    WHERE message_state = 'deleted'
    Xóa toàn bộ :
    Mã:
    DELETE FROM xf_post WHERE
    message_state = 'deleted'
    Phục hồi toàn bộ :
    Mã:
    UPDATE xf_post
    SET message_state = 'visible'
    WHERE message_state = 'deleted'
    Toàn bộ bài viết đã bị thành viên xóa dưới dạng unpublic trong khoảng thời gian. Các bạn nên chú ý cú pháp này vì nó khá hữu hiệu khi phải xử lý trong 1 khoảng time nhất định.

    Cú pháp : UNIX_TIMESTAMP( 'YEAR-MONTH-DAY 00:00:00') (các bạn tùy chọn, nhớ là month trước day nha)

    Tìm trước 30 tháng 7 bài viết đã bị thành viên xóa dưới dạng unpublic :
    Mã:
    SELECT * FROM xf_post
    WHERE message_state = 'deleted'
    AND post_date < UNIX_TIMESTAMP( '2012-07-30 00:00:00')
    Tìm trong tháng 6 tới 30 tháng 7 bài viết đã bị thành viên xóa dưới dạng unpublic
    Mã:
    SELECT * FROM xf_post
    WHERE message_state = 'deleted'
    AND post_date > UNIX_TIMESTAMP( '2012-06-30 00:00:00')
    AND post_date < UNIX_TIMESTAMP( '2012-07-30 00:00:00')
    Xóa toàn bộ bài viết đã bị thành viên xóa dưới dạng unpublic trước 30 tháng 7
    Mã:
    DELETE FROM xf_post
    WHERE message_state = 'deleted'
    AND post_date < UNIX_TIMESTAMP( '2012-07-30 00:00:00')
    Xóa toàn bộ bài viết trong tháng 6 tới 30 tháng 7 đã bị thành viên xóa dưới dạng unpublic
    Mã:
    DELETE FROM xf_post
    WHERE message_state = 'deleted'
    AND post_date > UNIX_TIMESTAMP( '2012-06-30 00:00:00')
    AND post_date < UNIX_TIMESTAMP( '2012-07-30 00:00:00')
    Phục hồi toàn bộ bài viết trong tháng 6 tới 30 tháng 7 đã bị thành viên xóa dưới dạng unpublic
    Mã:
    UPDATE xf_post
    SET message_state = 'visible'
    WHERE message_state = 'deleted'
    AND post_date > UNIX_TIMESTAMP( '2012-06-30 00:00:00')
    AND post_date < UNIX_TIMESTAMP( '2012-07-30 00:00:00')
    Giá sử ta có member có id = 20
    2. Toàn bộ bài viết đã bị 1 thành viên xóa dưới dạng unpublic có id là 20

    Mã:
    SELECT * FROM xf_post
    WHERE message_state = 'deleted'
    AND user_id =20
    Xóa toàn bộ :
    Mã:
    DELETE FROM xf_post WHERE
    message_state = 'deleted'
    AND user_id =20
    Phục hồi toàn bộ :
    Mã:
    UPDATE xf_post
    SET message_state = 'visible'
    WHERE message_state = 'deleted'
    AND user_id =20
    Tương tự cũng tìm trong tháng và thêm biến And user_id =20 vào

    Tìm trước 30 tháng 7 bài viết đã bị thành viên có ID 20 xóa dưới dạng unpublic :
    Mã:
    SELECT * FROM xf_post
    WHERE message_state = 'deleted'
    AND post_date < UNIX_TIMESTAMP( '2012-07-30 00:00:00')
    AND user_id =20
    Xóa trong tháng 6 tới 30 tháng 7 bài viết đã bị thành viên có ID 20 xóa dưới dạng unpublic
    Mã:
    DELETE FROM xf_post
    WHERE message_state = 'deleted'
    AND post_date > UNIX_TIMESTAMP( '2012-06-30 00:00:00')
    AND post_date < UNIX_TIMESTAMP( '2012-07-30 00:00:00')
    AND user_id =20
    Giả sử ta có theard có id = 10
    3. Toàn bộ bài viết đã bị thành viên xóa dưới dạng unpublic trong topic có id là 10


    Tương tự như trên nhưng thay
    Mã:
    AND user_id =20
    thành
    Mã:
    AND thread_id =10
    Ví dụ :
    Mã:
    DELETE FROM xf_post WHERE
    message_state = 'deleted'
    AND thread_id =10
    Phục hồi toàn bộ :
    Mã:
    UPDATE xf_post
    SET message_state = 'visible'
    WHERE message_state = 'deleted'
    AND thread_id =10
    4. Toàn bộ bài viết đã bị thành viên có id là 20 dưới dạng unpublic trong topic có id là 10

    Tìm toàn bộ

    Mã:
    SELECT * FROM xf_post
    WHERE message_state = 'deleted'
    AND user_id =20
    AND thread_id =10
    Xóa toàn bộ :
    Mã:
    DELETE FROM xf_post WHERE
    message_state = 'deleted'
    AND user_id =20
    AND thread_id =10
    Phục hồi toàn bộ :
    Mã:
    UPDATE xf_post
    SET message_state = 'visible'
    WHERE message_state = 'deleted'
    AND user_id =20
    AND thread_id =10
    Tìm trong 1 khoảng thời gian cũng tương tự như trên. Chúc các bạn thành công.
     
    Chỉnh sửa cuối: 15/9/17
    Thẻ (Tags):

Chia sẻ trang này

Đang tải...