2013-05-11 33 views
0

我有一個歌曲數據庫,需要實施搜索。SQL搜索標題字段與喜歡和定製訂購

我要產生結果的列表,列表的頭是

like 'st%' 

,其餘的結果是

like '%st%' 

結果如果我使用UNION使其能正確產生一個沒有重複的列表,但不是按照我想要的順序。

如果我使用UNION ALL,它會按照我想要的順序生成列表,但會有重複項。

我能夠使用這種查詢,還是我需要做另一種方式?

回答

1

您可以在order by子句中使用case語句。下面是這樣做的SQL標準方式:

select * 
from songs 
where song like '%st%' 
order by (case when song like 'st%' then 1 else 0 end) desc, 
     song 

在MySQL中,你可以使用表達式:

order by (song like 'st%') desc, song 

因爲布爾表達式爲0(假)或1(真)。 desc將首先放置比賽。

順便說一句,你不能取決於unionunion all後的排序。 SQL表本質上是無序的。除非使用order by子句(或MySQL中的group by子句)明確訂購,否則SQL結果集本身是無序的。

0

您可以執行查詢來搜索數據庫中這些元素的相似度,並將它們分配給該變量,您可以使用相應的代碼對它們進行分類。

+0

這很明顯。我的問題是看看是否可以在sql查詢中完成。 – Simon 2013-05-11 18:53:27