我有一个排名委员会,为每个性别男性和女性提供最好的前100个博客。
我有一个博客表:
PRIMARY
blogs_id users_id blogs_score blogs_score_time gender
1 11 2852 2015-09-09 05:21:51 m <-- same score but older date
2 23 2146 2015-09-10 07:31:54 m
3 23 2146 2015-09-10 07:32:26 m
4 23 2852 2015-09-10 04:42:15 m <-- same score but newer date
5 51 1793 2015-09-11 08:15:55 f
6 88 2947 2015-09-11 09:33:18 f
我有一个用户表:
PRIMARY
id best_rank gender
11 0 m
23 0 m
51 0 f
88 0 f
我需要为博客表中的每个用户COUNT最佳排名(使用MAX(blogs_score)和MAX(blogs_score_time)),并使用用户表 INSERT / UPDATE排名最高的每个性别的前100位用户的最佳排名,结果应为:
PRIMARY
id best_rank gender
11 2 m
23 1 m
51 2 f
88 1 f
每个性别的最佳等级 。
最后的想法是在用户的个人资料中显示排名位置,一旦有人投票(博客表中blogs_score
更改),best_rank
表中的users
列必须更新所有在特定性别群体中排名最高的100位用户的新排名重新计算。
如何根据我的需要调整和修复此(不工作)查询?
$sql->query("UPDATE users
JOIN (SELECT b.users_id,
@curRank := @curRank + 1 AS rank,
MAX(blogs_score), MAX(blogs_score_time)
FROM blogs b
JOIN (SELECT @curRank := 0) r
ORDER BY b.blogs_score DESC, p.blogs_score_time DESC LIMIT 100
) ranks ON (ranks.users_id = users.id)
SET users.best_rank = ranks.rank");
请帮我解决问题。我没有在stackoverflow上找到任何类似的解决方案,单独编写这样的查询对我来说似乎很复杂。
提前多多感谢!
答案 0 :(得分:0)
好的......这是我的最新消息:)
我不知道你想如何使用日期字段,但是row_number与分区一起做你需要做的事情吗?
let location = CLLocation(latitude: 55.676251, longitude: 12.580570) //Christiansborg Palace, chosen since it is relatively near the other locations, to make it obvious whether results are sensible or not
let orgSorter = OrganizationSorter()
let sortedLocations = orgSorter.sortOrganizationsByDistanceFromLocation(orgArray, location: location)
for org in orgArray {
print(org.name)
}
print("\n")
for org in sortedLocations {
print(org.name)
}
答案 1 :(得分:0)
为了得出你想要的结果,我会使用以下内容:
SELECT users_id, MAX(blogs_score), gender
FROM blogs
GROUP BY users_id, gender
ORDER BY blogs_score_time DESC
结果:
users_id MAX(blogs_score) gender
88 2947 f <-- first F
51 1793 f <-- second F
23 2852 m <-- first M
11 2852 m <-- second M