我有这些表: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 的答案的最终代码!
$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;");