Một giải pháp rất khó hiểu là lấy thread_id
được sắp xếp theo view_count
trong GROUP_CONCAT
. Sau đó, chúng ta có thể sử dụng các thao tác chuỗi để lấy thread_id
với tối thiểu view_count
.
Trong SELECT
của bạn mệnh đề, thay vì t.thread_id
, bạn có thể thử những cách sau:
SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT t.thread_id
ORDER BY t.view_count ASC
SEPARATOR ','),
',',
1) AS thread_id_with_minimum_views
Bây giờ, dựa trên SELECT
truy vấn để xác định các bản ghi trùng lặp với Chế độ xem tối thiểu, DELETE
truy vấn để xóa các bản ghi như vậy khỏi xf_thread
bảng sẽ như sau:
DELETE t_delete FROM xf_thread AS t_delete
INNER JOIN (SELECT CAST(SUBSTRING_INDEX(GROUP_CONCAT(DISTINCT t.thread_id ORDER BY t.view_count ASC SEPARATOR ','), ',', 1) AS UNSIGNED) AS tid_min_view
FROM (SELECT * FROM xf_thread) t
INNER JOIN xf_post p ON p.thread_id = t.thread_id
WHERE t.first_post_id = p.post_id
AND t.user_id = 0
AND t.reply_count < 2
GROUP BY t.title, t.username, p.message
HAVING Count(t.title) > 1
AND Count(t.username) > 1
AND Count(p.message) > 1
ORDER BY t.thread_id) AS t_dup
ON t_delete.thread_id = t_dup.tid_min_view