2017-05-13 4 views
-1

私は、データベースからランキングを取得し、それをテーブルに入れて注文するコードを書いています。問題は私がいくつかのテーブルに参加していることと、トーナメントに参加する選手の中にはランキング表(私は選手のリストについては別のテーブルがある)でさえないことです。今のところ、ランクを持たないプレイヤーはヌル値を持ち、そのように表示されます。それは大丈夫かもしれませんが、私は選手を順位で注文する必要があります。 enter image description hereSQL IFステートメント

空の値を5000にするようなステートメントや、ランキングのないプレイヤーがテーブルの下部に表示されるのでしょうか?前もって感謝します!

マイコード:

SELECT 
    *, 
    p1.surname AS 'p1surname', 
    p1.name AS 'p1name', 
    p2.surname AS 'p2surname', 
    p2.name AS 'p2name', 
    m1.rank AS 'm1rank', 
    m2.rank AS 'm2rank' 
    CASE 
     WHEN m1rank is NULL 
      THEN m1rank = '5000' 
    END, 
    CASE 
     WHEN m2rank is NULL 
      THEN m2rank = '5000' 
    END 
FROM 
    alists_lv lv 
JOIN 
    players p1 ON lv.player1_id = p1.id 
JOIN 
    players p2 ON lv.player2_id = p2.id 
LEFT JOIN 
    womensranking m1 ON lv.player1_id = m1.id 
LEFT JOIN 
    womensranking m2 ON lv.player2_id = m2.id 
WHERE 
    tournament_id = '$id' AND p1.gender = 'F' 
ORDER BY 
    (m1rank + m2rank) 
+0

互換性のないデータベースタグを削除しました。実際に使用しているデータベースにタグを付けてください。 –

答えて

0

私はあなたが持っているものだと思い罰金ですが、あなたはあなたのcase文にelse文を追加する必要があります。m1.rankはTHEN M1 NULLであるWHEN

CASE。ランク= '5000' 他m1.rank END、

CASE m2.rankがTHEN m2.rank = '5000' 他m2.rank END

NULLです

そして、同じcase文をorder by節に追加します。あるいは、それらのcase文をエイリアスし、order by節にそれらのエイリアスを置くこともできます。

0

私はこの問題を解決しました。ランクによって順位はそうでない場合は、最後のヌル順位それら場合COALESCE

SELECT *, p1.surname AS 'p1surname', 
p1.name AS 'p1name', 
p2.surname AS 'p2surname', 
p2.name AS 'p2name', 
COALESCE(m1.rank, '5000') AS 'm1rank', 
COALESCE(m2.rank, '5000') AS 'm2rank' 
0

を使用します。そうですね、

ORDER BY CASE WHEN m1rank IS NULL OR m2rank IS NULL THEN 1 ELSE 0 END, 
      m1rank, 
      m2rank 
関連する問題