回答編集履歴

1

追記修正

2018/12/07 03:04

投稿

CHERRY
CHERRY

スコア25171

test CHANGED
@@ -1,23 +1,69 @@
1
- SQL 文ですが、
1
+ いろいろ想像で補って SQL を修正。
2
2
 
3
3
 
4
4
 
5
- > WHERE post_type = 'news'
6
-
7
- > WHERE tt.term_id = $tarmId
5
+ 動いていると書かれている `ソースコード【2】`の SQL 部分 `$counts = $wpdb->get_results("〜")` を利用して書いてます。 $tarmId を引数で渡したいとかは、工夫してみてください。
8
6
 
9
7
 
10
8
 
11
- WHERE が2つありが、
9
+ りあえずテストしていせんが、こんな感じで、記載すれば動くのではないでしょうか。
10
+
11
+ `ソースコード【2】` の内容と同じ感じで、 `news` の ターム 58 の投稿者と count の合計が得られるはずです。
12
12
 
13
13
 
14
14
 
15
- ```
15
+ 外部から 引数を与える場合は、不正な文字を処理しないために prepare を利用した方が良いので、利用しています。
16
16
 
17
- WHERE post_type = 'news'
18
17
 
18
+
19
+ ```PHP
20
+
21
+ (略)
22
+
23
+ $tarmId = 58;
24
+
25
+ $counts = $wpdb->get_results( $wpdb->prepare( "
26
+
27
+ SELECT p.post_author AS user_id, sum(m.meta_value) AS SumUser
28
+
29
+ FROM $wpdb->posts AS p, $wpdb->postmeta AS m
30
+
31
+ WHERE p.ID = m.post_ID
32
+
33
+ AND p.ID IN ( SELECT tr.object_id
34
+
35
+ FROM $wpdb->term_relationships AS tr, $wpdb->posts AS p, $wpdb->term_taxonomy AS tt
36
+
37
+ WHERE p.post_type = 'news'
38
+
19
- AND tt.term_id = $tarmId
39
+ AND tt.term_id = %s
40
+
41
+ and p.id = tr.object_id
42
+
43
+ AND tr.term_taxonomy_id = tt.term_taxonomy_id
44
+
45
+ )
46
+
47
+ AND p.post_status = 'publish'
48
+
49
+ AND m.meta_key = 'count'
50
+
51
+ GROUP BY p.post_author
52
+
53
+ ORDER BY m.meta_value DESC LIMIT 10
54
+
55
+ ", $tarmId ) );
56
+
57
+ (略)
20
58
 
21
59
  ```
22
60
 
61
+
62
+
63
+ 参考: [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)
64
+
65
+
66
+
67
+
68
+
23
- のように AND ではないでしょうか?
69
+ なお、$wpdb を使うであれば、SQL について最低限の理解は必要ですので、SQL も学習するようにしましょう