2016-06-18 7 views
-1

ここでフィールドの順序を維持しようとしています。何かご意見は?これにより結果が得られますが、結果はさまざまな順序で出てきます。場所を選択するキャスト - 注文を更新する

SELECT value FROM field_one WHERE cast(field_number as BINARY(6)) IN 

(44,121.3,121.6,77,78,3,2.1,2.3,2.4,2.5) AND lead_id=1234 AND form_id=123 
+0

どの順序あなたが維持しようとしていますか? IN句で指定されたfield_number? 44,121.3などのように? –

+0

なぜdownvote?明確化のラウンドは、これをクリアすることができます。 field_numbersの注文 - はい。 – Patrick

答えて

1

クエリにはorder by句を指定する必要があります。 order byがなければ、シーケンスは未定義です。

SELECT value 
    FROM field_one 
WHERE cast(field_number as BINARY(6)) IN (44,121.3,121.6,77,78,3,2.1,2.3,2.4,2.5) 
    AND lead_id=1234 
    AND form_id=123 
ORDER BY value 
+0

ありがとう - 私はより明確にすべきだった。注文はかなり単純です - 私は実際のfield_numbersを意味しました。しかし、高速応答を感謝! – Patrick

0

あなたのIN句の値の順序を維持しようとしている場合は、以下のように手動でオーダー/ランクを作成することができ、内側には、あなたのテーブルにそのJOINをし、その手動で作成した階層別オーダー。カスタムオーダー用

SELECT value 
FROM field_one 
INNER JOIN 
(SELECT 1 as rank, 44 as val UNION ALL 
SELECT 2 , 121.3 UNION ALL 
SELECT 3, 121.6 UNION ALL 
SELECT 4, 77 UNION ALL 
SELECT 5, 78 UNION ALL 
SELECT 6, 3 UNION ALL 
SELECT 7, 2.1 UNION ALL 
SELECT 8, 2.3 UNION ALL 
SELECT 9, 2.4 UNION ALL 
SELECT 10, 2.5)T 
ON cast(field_number as BINARY(6)) = T.val 
WHERE lead_id=1234 AND form_id=123 
ORDER BY T.rank ASC 
+0

ありがとうTin Tran。これは私が思っていたことと一致しています。私はそれを行ってあげるよ。 – Patrick

+0

FIELD()を使用して他のupvoted答えを使用する方が速いです。 –

+0

はい - ありがとう! – Patrick

2

使用FIELD()機能:

SELECT value FROM field_one WHERE cast(field_number as BINARY(6)) IN 
(44,121.3,121.6,77,78,3,2.1,2.3,2.4,2.5) AND lead_id=1234 AND form_id=123 
ORDER BY FIELD(cast(field_number as BINARY(6)), 44,121.3,121.6,77,78,3,2.1,2.3,2.4,2.5) 

http://sqlfiddle.com/#!9/833ae4/7

+0

Paul - ありがとう、素晴らしい作品。 – Patrick

関連する問題