1

私は2つのMYSQLテーブル、firmarachを持っています

  • 会社表:
id_fir | ナズワ | 説明 | nr_konta | ロゴ
--------------------------------------------------
0 | abc | abc | 123 | img/abc.png
1 | qwerty| クォート| 123 | img/qwerty.png
  • ラッチテーブル:
id_rach | id_fir | data_termin | data_platnosc | クヲタ
-------------------------------------------------- --------------
0 | 1 | 2013-09-30 | null | null | 123
1 | 0 | 2013-09-30 | 2013-09-17 | 123
2 | 0 | 2013-09-26 | 2013-09-21 | 321
3 | 1 | 2013-09-27 | null | null | 333

私のSQLクエリ:

SELECT r.`id_rach` , f.`nazwa` , f.`opis` , r.`kwota` , r.`data_termin` , r.`data_platnosc`
FROM rach r
INNER JOIN firma f
USING ( id_fir )
ORDER BY `data_platnosc` IS NULL asc, `data_termin` desc

私はこれまでにやった:

id_rach | ナズワ | 説明 | くおた | data_termin | data_platnosc
-------------------------------------------------- ---------------
1 | abc | abc | 123 | 2013-09-30 | 2013-09-17
2 | abc | abc | 321 | 2013-09-26 | 2013-09-21
0 | qwerty| qwerty| 123 | 2013-09-30 | ヌル  
3 | qwerty| qwerty| 333 | 2013-09-27 | ヌル  

結果を取得したい:

最初の data_platnosc は null で、data_termin order des

次に、他の data_termin order des

id_rach | ナズワ | 説明 | くおた | data_termin | data_platnosc
-------------------------------------------------- ---------------
0 | qwerty| qwerty| 123 | 2013-09-30 | ヌル  
3 | qwerty| qwerty| 333 | 2013-09-27 | ヌル  
1 | abc | abc | 123 | 2013-09-30 | 2013-09-17
2 | abc | abc | 321 | 2013-09-26 | 2013-09-21

そしてこの解決策は?

結果を取得したい:

最初の data_platnosc は null で、data_termin 順は asc

その場合、他の data_termin は null オーダーの説明ではありません

id_rach | ナズワ | 説明 | くおた | data_termin | data_platnosc
-------------------------------------------------- ---------------
3 | qwerty| qwerty| 333 | 2013-09-27 | ヌル    
0 | qwerty| qwerty| 123 | 2013-09-30 | ヌル  
1 | abc | abc | 123 | 2013-09-30 | 2013-09-17
2 | abc | abc | 321 | 2013-09-26 | 2013-09-21
4

1 に答える 1

0

あなたorder byはほぼ正しいです:

ORDER BY `data_platnosc` IS NULL desc, `data_termin` desc

NULL最初に値が必要な場合はdesc、の最初の要素に使用しorder byます。 true の場合にIS NULL戻ります。最初にそれが必要です。1

IS NOT NULLまたは、 is を次のように表現できます。

ORDER BY `data_platnosc` IS NOT NULL asc, `data_termin` desc

このため:

最初の data_platnosc は null であり、data_termin は昇順です。その場合、他の data_termin は null オーダーの説明ではありません

case次のステートメントを使用します。

ORDER BY `data_platnosc` IS NULL desc,
         (case when `data_platnosc` IS NULL then `data_termin` end) asc,
         data_termin desc
于 2013-09-11T16:15:34.780 に答える