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

回答編集履歴

1

訂正を追記

2017/01/10 05:51

投稿

KiyoshiMotoki
KiyoshiMotoki

スコア4791

answer CHANGED
@@ -44,4 +44,48 @@
44
44
  ) AS ranking
45
45
  GROUP BY ranking.user_id
46
46
  ORDER BY total DESC;
47
+ ```
48
+ # 訂正
49
+ UNION 句だと値が重複している行が削除されてしまうため、UNION ALL句を使用する必要がありました。
50
+ [https://dev.mysql.com/doc/refman/5.6/ja/union.html](https://dev.mysql.com/doc/refman/5.6/ja/union.html)
51
+ > UNION のデフォルトの動作では、重複した行が結果から削除されます。(中略)オプションの ALL キーワードを指定すると、重複した行の削除は実行されず、その結果には、すべての SELECT ステートメントからの一致するすべての行が含まれます。
52
+ ```sql
53
+ SELECT ranking.user_id, SUM(ranking.creds) AS total
54
+ FROM (
55
+ (
56
+ SELECT c.user_id, c.creds
57
+ FROM
58
+ ((wp_2_myCRED_log c
59
+ LEFT JOIN wp_2_comments o ON c.ref_id = o.comment_ID)
60
+ INNER JOIN wp_2_term_relationships r ON o.comment_post_ID = r.object_id)
61
+ INNER JOIN wp_2_terms t ON r.term_taxonomy_id = t.term_id
62
+ WHERE
63
+ t.name = "カテゴリ1"
64
+ )
65
+ UNION ALL
66
+ (
67
+ SELECT c.user_id, c.creds
68
+ FROM
69
+ (((wp_2_myCRED_log c
70
+ LEFT JOIN wp_2_posts p ON c.ref_id = p.ID)
71
+ INNER JOIN wp_2_postmeta m ON p.ID = m.post_id)
72
+ INNER JOIN wp_2_term_relationships r ON m.meta_value = r.object_id)
73
+ INNER JOIN wp_2_terms t ON r.term_taxonomy_id = t.term_id
74
+ WHERE
75
+ t.name = "カテゴリ1"
76
+ )
77
+ UNION ALL
78
+ (
79
+ SELECT c.user_id, c.creds
80
+ FROM
81
+ ((wp_2_myCRED_log c
82
+ LEFT JOIN wp_2_posts p ON c.ref_id = p.ID)
83
+ INNER JOIN wp_2_term_relationships r ON p.ID = r.object_id)
84
+ INNER JOIN wp_2_terms t ON r.term_taxonomy_id = t.term_id
85
+ WHERE
86
+ t.name = "カテゴリ1"
87
+ )
88
+ ) AS ranking
89
+ GROUP BY ranking.user_id
90
+ ORDER BY total DESC;
47
91
  ```