0

頭を悩ませている高度なクエリに少し問題があります。

基本的に、特定のサウンドトラックに対応する投票テーブルに投票があります。私のクエリは、与えられた投票に基づいてサウンドトラックのランクを取得する必要があります。

以下の私のアプローチは、テーブルに投票がある場合は問題なく機能しますが、投票がない場合はランクにNULL値が与えられます。

クエリは次のとおりです。

SELECT soundtrack.*, 
       (SELECT WrappedQuery.rank 
        FROM   (SELECT @rownum := @rownum + 1 AS rank, 
                       prequery.soundtrack_id 
                FROM   (SELECT @rownum := 0) sqlvars, 
                       (SELECT Count(*), 
                               soundtrack_id 
                        FROM   vote 
                        GROUP  BY vote.soundtrack_id 
                        ORDER  BY Count(*) DESC) prequery) WrappedQuery 
        WHERE  WrappedQuery.soundtrack_id = soundtrack.id) AS rank 
FROM   soundtrack 
WHERE  soundtrack.id = 33 
       AND live = 1 
ORDER  BY rank ASC 

問題は部品に関係していると感じていますが、(SELECT COUNT(*))これまでに試したことはすべてうまくいきません.

誰かが私の問題に光を当ててくれることを願っています。

編集 これがSQLFiddle http://www.sqlfiddle.com/#!2/c8db2/2/0です

4

3 に答える 3

0
SELECT soundtrack.*, rankquery.rank
FROM(
    SELECT prequery.*, @rownum := @rownum + 1 AS rank 
            (
            SELECT COALESCE(Count(*),0) as num_votes, 
                   soundtrack_id 
            FROM   vote 
            GROUP BY soundtrack_id 
            ORDER BY num_votes DESC
            ) as prequery,
            (SELECT @rownum := 0) as sqlvars
    ) rankquery
INNER JOIN soundtrack
rankquery.soundtrack_id = soundtrack.id
WHERE  soundtrack.id = 33 
       AND soundtrack.live = 1
ORDER BY rankquery.rank ASC
于 2013-07-16T14:36:11.313 に答える