【问题标题】:MySQL Query to get rank based on the most voted photos of an userMySQL Query 根据用户投票最多的照片获得排名
【发布时间】:2013-01-20 10:31:56
【问题描述】:

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

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

            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 但没有成功。

非常感谢。

【问题讨论】:

  • 你可以使用MySQL的MAX

标签: php mysql sql count


【解决方案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”,如果没有,则将其丢弃。这样,您将获得用户和特定照片的特定组合的排名。

【讨论】:

  • 感谢您的回答和解释。但是,我无法让它工作。它返回 rank = 1,就好像用户是第一个。
  • @Kev,然后,只是为了微笑,尝试仅通过用户/照片运行内部预查询并计数以查看是否返回预期排名中的记录(没有 sqlvars 排名实现).. . 看看是否可以。
  • 好的,最后我只需要在原始查询中将 user_id 分组更改为 photo_id 分组。有道理...对此感到抱歉,谢谢您的回答。
  • @Kev,分组依据应该在 User_ID 和 Photo_ID 上。将每张照片保持在自己的排名中的照片 ID,但您的最终 HAVING 子句正在查找 USER 的记录并仅返回该用户的照片(如果全部),或者通过您的 LIMIT 0,1 仅获得排名靠前的.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-18
  • 1970-01-01
  • 2022-08-17
  • 1970-01-01
  • 2017-03-21
相关资源
最近更新 更多