繁体   English   中英

MySQL查询可根据用户投票最多的照片获得排名

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM