被问到的问题是,如何获得不包含重复项的结果。由于没有提到哪个字段,我假设它是文本类型的主要评论字段,这意味着您不能在其上使用 DISTINCT。
然而,由于这个字段包含评论而不是小说的文本,那么评论字段根本不应该是文本类型的。因此,需要将字段从文本类型转换为 varchar 类型,并使用 (max) 作为字段大小。
varchar(max) 字段可以保存 64k 的数据,根据使用的字母表,大约是 10,000-20,000 个单词。这应该足够容纳一篇 40 页的文章或一条评论。
至于 SQL:
SELECT comment_ID,comment_parent,comment_author,comment_author_url,comment_author_email,comment_content,comment_date,comment_type,ck_rating_up,ck_rating_down
FROM $wpdb->comments
LEFT JOIN $comment_rating_table
ON ($wpdb->comments.comment_ID = $comment_rating_table.ck_comment_id)
WHERE comment_post_ID = $post_id
AND comment_approved = 1
AND comment_ID IN (SELECT DISTINCT( comment_content ) FROM $wpdb->comments
LEFT JOIN $comment_rating_table
ON ($wpdb->comments.comment_ID = $comment_rating_table.ck_comment_id)
WHERE comment_post_ID = $post_id AND comment_approved = 1)
order by comment_id ASC
更快的选项是使用 GROUP BY comment_content 代替 DISTINCT,然后选择 MIN 或 MAX
SELECT comment_ID,comment_parent,comment_author,comment_author_url,comment_author_email,comment_content,comment_date,comment_type,ck_rating_up,ck_rating_down
FROM $wpdb->comments
LEFT JOIN $comment_rating_table(
SELECT MAX(comment_id) AS id FROM comment GROUP BY comment_content
maxid ON ($wpdb->comments.comment_ID = $comment_rating_table.ck_comment_id) WHERE comment_post_ID = $post_id AND comment_approved = 1) order by comment_id ASC