Php MySQL查询,根据用户投票最多的照片获得排名
现在我使用这个查询来获得用户的排名。问题是它使用了他所有照片中的所有选票来获得他的排名。我希望查询只使用他最受欢迎的照片来计算他的排名 以下是原始查询,如有任何帮助,将不胜感激:Php MySQL查询,根据用户投票最多的照片获得排名,php,mysql,sql,count,Php,Mysql,Sql,Count,现在我使用这个查询来获得用户的排名。问题是它使用了他所有照片中的所有选票来获得他的排名。我希望查询只使用他最受欢迎的照片来计算他的排名 以下是原始查询,如有任何帮助,将不胜感激: select WrappedQuery.* from ( select @rownum := @rownum +1 as rank, prequery.user_id,
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'
我试图在预查询中限制0,1,但没有成功
非常感谢。如果您正在查找特定的照片,请忽略按人分组,但忽略特定元素,然后回滚该信息以获取用户。您对sqlvars@rownum原则的使用将保持不变 让您的内部查询更像(表中还可以猜测特定“Photo_ID”的列名)
“预查询”将以适当的降序顺序返回记录。然后,您必须将@rownum应用于所有可能的行,并应用HAVING子句。Where子句通常会预先检查记录是否符合结果集的条件,如果不符合条件,则会在分配@rownum之前抛出。HAVING子句允许记录应用@rownum,然后查看它的“user_ID”,如果没有,则将其抛出。这样,您就可以根据用户和特定照片的具体组合获得排名。您可以使用MySQLmax。感谢您的回答和解释。无论如何,我不能让它工作。它返回rank=1,就好像用户是第一个一样。@Kev,然后,仅为了GRIN,尝试通过user/photo和count运行内部预查询,看看这是否返回预期排名中的记录(没有sqlvars rank实现)。。。最后,我只需要在原始查询中将“按用户id分组”更改为“按照片id分组”。有道理。。。对此很抱歉,谢谢您的回答。@Kev,group by应同时在用户ID和照片ID上。照片ID用于将每张照片保持在其自己的排名中,但您的最终HAVING子句是查找该用户的记录,并仅返回该用户的照片(如果有),或者通过您的限制0,1仅获得排名靠前的照片。
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