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

时间:2013-02-05 13:20:47

标签: php mysql sql count

现在我正在使用此查询来获取用户的排名。问题在于它使用了所有照片中的所有投票来获得他的排名。我希望查询只使用他最高投票的照片来计算他的排名。

以下是原始查询,非常感谢任何帮助:

            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但不起作用。

非常感谢。

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”,如果没有,则将其抛出。这样,您就可以获得用户和特定照片的特定组合的排名。