次のテーブルがあります: users
、comments
、ratings
、およびitems
基本的にこれを行うSQLクエリを書くことが可能かどうか知りたいです:
user_id は各テーブルにあります。SQLクエリで各テーブルの各オカレンスをカウントしたいと思います(users
もちろん例外です)。しかし、いくつかのテーブルには他のテーブルよりも重いものを載せたいと思っています。次に、「スコア」を集計したいと思います。
次に例を示します。
user_id 5 発生... アイテムで 2 回。コメントで5回。視聴率11回。
次のように合計するフォーミュラ/ポイント システムが必要です。
項目 2 x 5 = 10; コメント 5 x 1 = 5; 定格 11 x .5 = 5.5
合計 21.5
これは私がこれまでに持っているものです.....
SELECT u.users
COUNT(*) r.user_id
COUNT(*) c.user_id
COUNT(*) i.user_id
FROM users as u
JOIN COMMENTS as c
ON u.user_id = c_user_id
JOIN RATINGS as r
ON r.user_id = u.user_id
JOIN ITEMS as i
i.user_id = u.user_id
WHERE
????
GROUP BY u.user_id
ORDER by total DESC
数式部分のやり方がわかりません(可能であれば)。または合計を集計する方法。
John Woo's Answer に基づく最終コード!
$sql = mysql_query("
SELECT u.username,
(a.totalCount * 5) +
(b.totalCount) +
(c.totalCount * .2) totalScore
FROM users u
LEFT JOIN
(
SELECT user_id, COUNT(user_id) totalCount
FROM items
GROUP BY user_id
) a ON a.user_id= u.user_id
LEFT JOIN
(
SELECT user_id, COUNT(user_id) totalCount
FROM comments
GROUP BY user_id
) b ON b.user_id= u.user_id
LEFT JOIN
(
SELECT user_id, COUNT(user_id) totalCount
FROM ratings
GROUP BY user_id
) c ON c.user_id = u.user_id
ORDER BY totalScore DESC LIMIT 10;");