前提・実現したいこと
・各商品(記事)かつ特定のユーザーが投稿した平均評価(5段階)を算出するSQLを作成したいです。
■投稿した口コミの属性情報が格納されているDB(postmeta)
・投稿するたびに、post_id:500,501…とレコードが追加されていきます。
・meta_idは単なる一意のキーです
・meta_key, meta_value
meta_keyの内容に応じて、meta_valueに値が表示されます。
wpcr3_review_post:レビューを投稿した記事(商品)のID
wpcr3_review_name:投稿者の名前
wpcr3_review_rating:投稿された評価(5段階)
meta_id | post_id | meta_key | meta_value |
---|---|---|---|
1 | 500 | wpcr3_review_post | 10 |
2 | 500 | wpcr3_review_name | editor |
3 | 500 | wpcr3_review_rating | 5 |
4 | 501 | wpcr3_review_post | 11 |
5 | 501 | wpcr3_review_name | yuki |
6 | 501 | wpcr3_review_rating | 3 |
発生している問題・エラーメッセージ
各商品毎の平均評価算出は①のSQL分で正しく動くのですが、各商品かつ特定のユーザー(meta_value='editor'のユーザー)という条件を指定したく、 WHERE句の中に、AND (meta_value='editor' and meta_key='wpcr3_review_name'))
というのを追記すると、上手く値が取れません。
該当のソースコード
①各商品毎の平均評価算出
$review_query="SELECT round(AVG(meta_value),1) AS review_avg,count(meta_value) AS review_cnt FROM $wpdb->postmeta WHERE post_id IN (SELECT post_id FROM $wpdb->postmeta WHERE (meta_value=". get_the_ID() ." and meta_key='wpcr3_review_post') AND meta_key='wpcr3_review_rating'"
②各商品毎かつ特定のユーザーの平均評価算出
$review_query="SELECT round(AVG(meta_value),1) AS review_avg,count(meta_value) AS review_cnt FROM $wpdb->postmeta WHERE post_id IN (SELECT post_id FROM $wpdb->postmeta WHERE (meta_value=". get_the_ID() ." and meta_key='wpcr3_review_post') AND (meta_value='editor' and meta_key='wpcr3_review_name')) AND meta_key='wpcr3_review_rating'"
試したこと
上記に記載済
補足情報(FW/ツールのバージョンなど)
None
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/20 06:02