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 を使用することはできません。

ただし、このフィールドにはコメントが含まれており、小説に相当するテキストではないため、コメント フィールドをテキスト型にする理由はまったくありません。したがって、フィールドを text 型から varchar 型に変換し、フィールド サイズとして (max) を使用する必要があります。

varchar(max) フィールドは 64k のデータを保持できます。これは、使用されるアルファベットに応じて約 10,000 ~ 20,000 語になります。これは、40 ページのエッセイまたは 1 つのコメントを保持するのに十分なスペースです。

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

より高速なオプションは、DISTINCT の代わりに GROUP BY comment_content を使用し、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 に答える