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 に答える