0

现在我正在使用这个查询来获取用户的排名。问题是它使用他所有照片中的所有选票来获得他的排名。我希望查询只使用他投票最多的照片来计算他的排名。

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

            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 但没有奏效。

非常感谢。

4

1 回答 1

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

“预查询”将已经以正确的降序排列顺序返回记录。然后,您必须将 @rownum 应用于所有可能的行并应用 HAVING 子句。Where 子句通常会预先检查一条记录是否符合结果集的要求,如果没有,则在分配 @rownum 之前将其抛出。HAVING 子句允许记录应用@rownum,然后查看它以查找您的“user_ID”,如果没有,则将其丢弃。这样,您将获得用户和特定照片的特定组合的排名。

于 2013-02-05T13:53:43.377 回答