1

私は少し長い選択をして、多くのテーブルに参加しています。私がする必要があること: 私は最低価格を選択しています

SELECT MIN(accomodation_price.price) AS price_from

price_from で結果を注文するまで、すべてがうまく機能します。ORDER BY price_from を使用できないことはわかっているので、ORDER BY MIN(accomodation_price.price) を使用しようとしましたが、CASE で使用したいと考えています。私の選択はうまく機能しますが、MIN(accomodation_price.price) の値を持たない最初の結果を適用します...最初に何らかの値を持つ結果が必要です...

これが私のコードです.MIN ....の行は機能していません。理由はわかりません。WHERE IS NOT NULL も使用しようとしましたが、同じです....

ORDER BY

            CASE 

                WHEN accomodation.valid_to>=NOW() AND accomodation.valid_from<=NOW() THEN 0
                WHEN NOW()>accomodation.valid_to AND accomodation.valid_to!='0000-00-00' THEN 1 
                WHEN MIN(accomodation_price.price) > '0' THEN 2
                ELSE 3 END";
4

1 に答える 1

1

あなたがすべきことは、そのフィールドを(とともにCASE)結果データセットに含め、さらに別のフィールドでラップしてからselect、そのフィールドで並べ替えることです。何かのようなもの:

select * from
(select field1,field2,...,
(CASE 
WHEN accomodation.valid_to>=NOW() AND accomodation.valid_from<=NOW() THEN 0
WHEN NOW()>accomodation.valid_to AND accomodation.valid_to!='0000-00-00' THEN 1 
WHEN MIN(accomodation_price.price) > '0' THEN 2
ELSE 3 END) as field3 from table1,table2...,tableN) as R
order by R.field3
于 2013-07-09T14:51:10.553 に答える