web-dev-qa-db-ja.com

特定のコメントメタ値を持つユーザーコメントの数を数える

特定のユーザーによるコメント数を数えるために、以下のコードを使用しています。

global $wpdb;

        $count = $wpdb->get_var(
          'SELECT COUNT( comment_id ) FROM '. $wpdb->comments .'
          WHERE user_id = '.$user->ID.'
          AND comment_approved = "1"
          AND comment_type NOT IN ("pingback", "trackback" )'
        );

さらに、値として0または1を取るコメントメタフィールド( 'think')を使用しています。その値を取得するために私が使用します:

get_comment_meta($comment_id, 'consider',true);

これら2つの操作をマージして、ユーザーが送信したコメントの数と、'consider'のメタ値が1に等しくなるようにするにはどうすればよいですか。私はSQLユーザーではありませんし、SQLクエリの中でテーブルwp_commentmetaを使う必要があるようです。

あなたの助けはいつも感謝されています。

あなたの基本的な質問は純粋なSQLの質問です。

$count = $wpdb->get_var(
  'SELECT COUNT( comments.comment_ID ) FROM '. $wpdb->comments .' as comments
  LEFT JOIN '.$wpdb->commentmeta.' AS cmeta ON comments.comment_ID = cmeta.comment_id
  WHERE user_id = 1
  AND comment_approved = "1"
  AND comment_type NOT IN ("pingback", "trackback" )
  AND cmeta.meta_key = "rating"
  AND cmeta.meta_value = 5'
);

読みやすくするために少し整理しました。

そのSQLを使ってやっていることはかなり近い、おそらくあなたが得るものと同じで、....

$args = array(
  'type' => '',
  'user_id' => '1',
  'count' => true,
  'meta_key' => 'rating',
  'meta_value' => '5',
);
$count = get_comments($args);

トラックバックとpingbackを明示的に除外しているわけではありませんが、トラックバックとpingbackに関連付けられたユーザーIDが割り当てられることはないと確信しているので、そのメカニズムによって除外しています。

1
s_ha_dum

これを試して :

SELECT
    COUNT(*) AS RESULT
FROM
    wp_commentmeta a,
    wp_comments b
WHERE
    a.comment_id = b.comment_ID
AND a.meta_value = 1
AND user_id = 2

それが役に立てば幸い!

0
Obama