2013-02-05 25 views
0

现在我正在使用此查询来获得用户的排名。问题是它使用他所有照片中的所有投票来获得他的排名。我希望查询只使用他的顶级投票照片来计算他的排名。MySQL Query根据用户投票数最多的照片获得排名

这里是原来的查询,任何帮助将是非常非常赞赏:

  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

你可以使用MAX的MySQL –

回答

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

+0

感谢您的回答和解释。如何,我无法得到这个工作。它返回rank = 1,就好像用户是第一个一样。 – Kev

+0

@Kev,然后,只是为了笑,试着运行内部prequery只是用户/照片和计数,看看是否返回预期的排名记录(没有sqlvars排名实施)...看看是否可以。 – DRapp

+0

好吧,最后我只需要将user_id中的group更改为我的原始查询中的photo_id。有道理...对此感到抱歉,谢谢你的回答。 – Kev

相关问题