teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

追記修正

2018/12/07 03:04

投稿

CHERRY
CHERRY

スコア25234

answer CHANGED
@@ -1,12 +1,35 @@
1
- SQL 文ですが、
1
+ いろいろ想像で補って SQL を修正。
2
2
 
3
- > WHERE post_type = 'news'
4
- > WHERE tt.term_id = $tarmId
3
+ 動いていると書かれている `ソースコード【2】`の SQL 部分 `$counts = $wpdb->get_results("〜")` を利用して書いてます。 $tarmId を引数で渡したいとかは、工夫してみてください。
5
4
 
6
- WHERE が、2つありまが、
5
+ とりあえず、テストしていせんが、こんな感じで、記載すれば動くのではないでしょうか。
6
+ `ソースコード【2】` の内容と同じ感じで、 `news` の ターム 58 の投稿者と count の合計が得られるはずです。
7
7
 
8
+ 外部から 引数を与える場合は、不正な文字を処理しないために prepare を利用した方が良いので、利用しています。
9
+
10
+ ```PHP
11
+ (略)
12
+ $tarmId = 58;
13
+ $counts = $wpdb->get_results( $wpdb->prepare( "
14
+ SELECT p.post_author AS user_id, sum(m.meta_value) AS SumUser
15
+ FROM $wpdb->posts AS p, $wpdb->postmeta AS m
16
+ WHERE p.ID = m.post_ID
17
+ AND p.ID IN ( SELECT tr.object_id
18
+ FROM $wpdb->term_relationships AS tr, $wpdb->posts AS p, $wpdb->term_taxonomy AS tt
19
+ WHERE p.post_type = 'news'
20
+ AND tt.term_id = %s
21
+ and p.id = tr.object_id
22
+ AND tr.term_taxonomy_id = tt.term_taxonomy_id
23
+ )
24
+ AND p.post_status = 'publish'
25
+ AND m.meta_key = 'count'
26
+ GROUP BY p.post_author
27
+ ORDER BY m.meta_value DESC LIMIT 10
28
+ ", $tarmId ) );
29
+ (略)
8
30
  ```
31
+
32
+ 参考: [https://wpdocs.osdn.jp/関数リファレンス/wpdb_Class](https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wpdb_Class)
33
+
34
+
9
- WHERE post_type = 'news'
35
+ なお、$wpdb を使うのであれば、SQL について最低限の理解は必要ですので、SQL も学習するようにしましょう。
10
- AND tt.term_id = $tarmId
11
- ```
12
- のように AND ではないでしょうか?