2016-12-17 21 views
3

私はランクをTC5に割り当てる必要があります。MySQLのランク関数はランクを割り当てます

SELECT a.id, a.user_id, a.tc1, a.tc4, min(a.tc5), a.tc2, b.avatar, c.username, @curRank := @curRank + 1 AS Rank 
FROM 
treningove_casy a INNER JOIN 
sn_users b ON a.user_id=b.id INNER JOIN 
users c ON a.user_id=c.id , (SELECT @curRank := 0) r 
WHERE a.tc2 LIKE 'Motokáry Modrice' 
GROUP BY a.user_id 

どのように画像です。

enter image description here

変更されたコード

SELECT x.*, (@curRank := @curRank + 1) as Rank 
FROM (SELECT a.id, a.user_id, a.tc1, a.tc4, min(a.tc5) as tc5, 
      a.tc2, b.avatar, c.username, 
     FROM sbhgl_chronoengine_chronoforms_datatable_treningove_casy a INNER JOIN 
      sbhgl_jsn_users b 
      ON a.user_id = b.id INNER JOIN 
      sbhgl_users c 
      ON a.user_id = c.id 
     WHERE a.tc2 LIKE 'Motokáry Modřice' 
     GROUP BY a.user_id 
    ) x CROSS JOIN 
    (SELECT @curRank := 0) params 
ORDER BY tc5 DESC; 
+0

あなたは 'ORDER BY tc5'を使う必要があります。 – Barmar

+0

'GROUP BY'を使用している間に非集計カラムを選択しているため、クエリに問題があります。 –

答えて

3
SELECT a.id, a.user_id, a.tc1, a.tc4, a.tc2, b.avatar, c.username, 
    (select rank from (SELECT 
     IF (@score=s.tc5, @rank:[email protected], @rank:[email protected]+1) rank, 
     @score:=s.tc5 tc5s 
     FROM treningove_casy s, 
     (SELECT @score:=0, @rank:=0) r 
     ORDER BY tc5 DESC) s) as rank 
FROM 
treningove_casy a INNER JOIN 
sn_users b ON a.user_id=b.id INNER JOIN 
users c ON a.user_id=c.id , (SELECT @curRank := 0) r 
WHERE a.tc2 LIKE 'Motokáry Modrice' 
GROUP BY a.user_id 

あなたは、これはあなたを助けることを願って、ソリューションの上に試すことができます助けてください。

+0

'SELECT'リストに複数の行を返すサブクエリを持つことはできません。 – Barmar

+0

こんにちは、おかげで、このコードを入力しました。エラーが発生しました:SQLSTATE [21000]:カーディナリティ違反:1242サブクエリが1行以上返します –

0

MySQLでは、通常、ランクに変数を使用します。あなたの場合、サブクエリを使用します。私は、変数メソッドは常にGROUP BYでは動作しないことが判明:

SELECT x.*, (@curRank := @curRank + 1) as Rank 
FROM (SELECT a.id, a.user_id, a.tc1, a.tc4, min(a.tc5) as tc5, 
      a.tc2, b.avatar, c.username, 
     FROM treningove_casy a INNER JOIN 
      sn_users b 
      ON a.user_id = b.id INNER JOIN 
      users c 
      ON a.user_id = c.id 
     WHERE a.tc2 LIKE 'Motokáry Modrice' 
     GROUP BY a.user_id 
    ) x CROSS JOIN 
    (SELECT @curRank := 0) params 
ORDER BY tc5 DESC; 

注:表の別名の使用が良いです。ただし、エイリアスがテーブル名の略語である場合は、クエリを理解する方がはるかに簡単です。

+0

こんにちは、このコードを入力していただきありがとうございます。私はエラーがあります:SELECT [8] –

+0

@MotoKartCupで未知数15 expr_type。 。 。サブクエリは実行されますか?私はそのようなエラーを引き起こす何も見ていない。 –

+0

変更されたコードを追加しました。 はまだエラーを書き込みます:SELECT [8]に15未知のexpr_type –

関連する問題