2010-09-16 28 views
3

我有這個疑問:基於匹配條件排序SQL記錄

SELECT * FROM table WHERE key LIKE '1,2,3,%' OR key LIKE '1,2,%' OR key LIKE '1,%' 

它是更多鈔票來排序記錄從該查詢基於其條件是第一個匹配返回。我希望先獲得與key LIKE '1,2,3,%'匹配的所有記錄,然後再獲得與key LIKE '1,2,%'之後的所有記錄。

舉例來說,如果我有這些記錄:

key: "1,2,3,4" 
key: "1,2,5" 
key: "1,4" 
key: "1,2,5,6" 
key: "1,3" 
key: "1,2,3,4,7" 
key: "1,2,4" 

我想他們進行排序,像這樣:

key: "1,2,3,4" 
key: "1,2,3,4,7" 
key: "1,2,4" 
key: "1,2,5" 
key: "1,2,5,6" 
key: "1,3" 
key: "1,4" 

是否有可能呢?

+0

那麼,你有什麼嘗試?注意這只是普通的詞法字符串排序... – 2010-09-16 19:37:09

+0

您的查詢是多餘的。只使用「WHERE KEY LIKE'1,%'」會給你相同的結果。 – 2010-09-16 19:37:53

+0

@凱文,是的,你是絕對正確的。由於我現在在「ORDER BY CASE」中使用了更具體的條件,因此我現在將WHERE條件更改爲「1,%」。 – remi 2010-09-18 12:48:25

回答

2

.... ORDER BY CASE
WHEN key LIKE '1,2,3,%' THEN 1
WHEN key LIKE '1,2,%' THEN 2
ELSE 3
END

+0

我會用它,因爲它是我所熟悉的。 – 2010-09-16 20:00:57

+0

謝謝!這正是我所用的。在我看來,使用全文搜索對於這種特殊情況來說有點過於耗費資源。 – remi 2010-09-18 12:47:13

1

是否使用「UNION」可以完成這項工作?

SELECT * FROM表WHERE鍵LIKE '1,2,3%' UNION SELECT * FROM表WHERE鍵LIKE '1,2,%' UNION SELECT * FROM表WHERE鍵LIKE鍵LIKE' 1,%'