现在我正在使用此查询来获取用户的排名。问题在于它使用了所有照片中的所有投票来获得他的排名。我希望查询只使用他最高投票的照片来计算他的排名。
以下是原始查询,非常感谢任何帮助:
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'
我试图在prequery中设置LIMIT 0,1但不起作用。
非常感谢。
答案 0 :(得分:0)
如果您正在寻找特定的照片,那么忽略该人的分组,但是具体的元素,然后回滚该信息以获取用户。您对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
“prequery”已经按照正确的降序排序顺序返回记录。然后,您必须将@rownum应用于所有可能的行并应用HAVING子句。 Where子句通常预先检查是否有资格获得结果集的记录,如果没有分配@rownum,则抛出该记录。 HAVING子句允许记录应用@rownum,然后查看它的“user_ID”,如果没有,则将其抛出。这样,您就可以获得用户和特定照片的特定组合的排名。