0

用于get_results($sql, ARRAY_A)查询 wp_comments 时,结果中有注释。

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 
order by comment_id ASC

如何避免重复评论?

4

1 回答 1

0

被问到的问题是,如何获得不包含重复项的结果。由于没有提到哪个字段,我假设它是文本类型的主要评论字段,这意味着您不能在其上使用 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
于 2014-03-19T02:01:08.650 回答