特定のユーザーによるコメント数を数えるために、以下のコードを使用しています。
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が割り当てられることはないと確信しているので、そのメカニズムによって除外しています。
これを試して :
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
それが役に立てば幸い!