は、ここに私のテーブル構造である:どのように投稿数をカウントできますか?
-- reputations
+----+-------------+---------+-------+------------+------------+
| id | post_id | user_id | score | reputation | date_time |
+----+-------------+---------+-------+------------+------------+ -- Suppose:
| 1 | 1 | 1 | 1 | 5 | 1500489844 | -- out of last week
| 2 | 4 | 3 | -1 | -2 | 1500499815 | -- out of last week
| 3 | 2 | 3 | 1 | 5 | 1500584821 |
| 4 | 3 | 1 | 1 | 5 | 1501389166 |
| 5 | 2 | 4 | 1 | 5 | 1501399142 |
| 6 | 2 | 1 | -1 | -2 | 1501399142 |
| 7 | 4 | 1 | 0 | 15 | 1501481186 |
| 8 | 5 | 1 | 1 | 5 | 1501481297 |
+----+-------------+---------+-------+------------+------------+
-- Note: the last row came from an accepted-answer, that's why its score is 0
-- post_tag
+---------+--------+
| post_id | tag_id |
+---------+--------+
| 1 | 2 |
| 1 | 4 |
| 2 | 2 |
| 3 | 1 |
| 3 | 4 |
| 4 | 3 |
| 5 | 1 |
+---------+--------+
-- tags
+----+--------+
| id | name |
+----+--------+
| 1 | php |
| 2 | html |
| 3 | css |
| 4 | mysql |
+----+--------+
そして、ここで私のクエリです:
SELECT
t.tag, sum(r.reputation) AS tag_reputation, sum(r.score) AS tag_score
FROM
users u
LEFT JOIN reputations r
ON r.user_id = u.id
AND r.date_time > 1500584821
JOIN post_tag pt ON pt.post_id = r.post_id
JOIN tags t ON t.id = pt.tag_id
WHERE u.id = 1 -- Specific user: Jack
GROUP BY
u.id, u.user_name, t.tag
ORDER BY
u.id, tag_reputation DESC;
そして、ここで現在の結果である:あなたが見ることができるように
tag | tag_reputation | tag_score
----: | :------------- | :---------
css | 15 | 0
php | 10 | 2
mysql | 5 | 1
html | -2 | -1
が、結果はtag_reputation
で注文された特定のユーザーの評判とスコアを持つタグのリスト。 Fiddle
今、私はまた、各タグの投稿数をカウントします。
tag | tag_reputation | tag_score | post_num
----: | :------------- | :--------- | :-------
css | 15 | 0 | 1
php | 10 | 2 | 2
mysql | 5 | 1 | 1
html | -2 | -1 | 1
私はそれをどのように操作を行うことができます。これは期待される結果のですか?私はpost_id
列とGROUP BY
節で作業しなければならないと思います。しかし、私は正確にどのように知りません。
Iはすでに存在している同じ郵便番号で 'reputations'テーブルにもう一つの行を追加しました。しかし残念なことに 'post_num'も増加しました。 http://dbfiddle.uk/?rdbms=mariadb_10.2&frd=5d92f3fdf78757136a7eaf04ebf01e30 –
あなたの新しいフィドルでは、あなたは 'reputations'テーブルに同じ' post_id'(5)と 'user_id'(1)この記録は数えられませんか? –
明らかにそうではありません。post_id(5)は重複しているため、一度カウントされます。 –