[英]MySQL Query to get rank based on the most voted photos of an user
现在,我正在使用此查询来获取用户的排名。 问题在于它使用了他所有照片的所有选票来获得他的排名。 我希望查询仅使用他获得最高投票的照片来计算他的排名。
这是原始查询,任何帮助将不胜感激:
select WrappedQuery.*
from (
select
@rownum := @rownum +1 as rank,
prequery.user_id,
prequery.vote_count
from
( select @rownum := 0 ) sqlvars,
( SELECT user_id, count(id) vote_count
from votes
where theme_id = '$currentTheme->id'
group by user_id
order by count(id) desc) prequery
) WrappedQuery
where WrappedQuery.user_id = '$me->id'
我试图在预查询中设置LIMIT 0,1,但是没有用。
非常感谢。
如果您要查找特定的照片,请忽略此人的分组,但是将特定的元素,然后回滚该信息以获取用户。 您对sqlvars @rownum原理的使用将保持不变。
让您的内部查询更像(猜测特定“ Photo_ID”的列名也将在表中)
select
@rownum := @rownum +1 as rank,
prequery.user_id,
prequery.photo_ID,
prequery.vote_count
from
( select
v.User_ID,
v.Photo_ID,
count(*) as Vote_Count
from
IsItStillTheVotesTable v
group by
v.User_ID,
v.Photo_ID
order by
count(*) desc ) as prequery,
( select @rownum := 0 ) sqlvars
HAVING
prequery.user_id = '$me->id'
LIMIT
0,1
“预查询”将已经按正确的降序排列顺序返回记录。 然后,必须将@rownum应用于所有可能的行,并应用HAVING子句。 Where子句通常会预先检查记录是否符合结果集的条件,如果未分配@rownum,则会抛出该记录。 HAVING子句允许对记录应用@rownum,然后为您的“ user_ID”查看该记录,否则,将其丢弃。 这样,您将在用户和特定照片的特定组合上获得排名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.