我有一個歌曲數據庫,需要實施搜索。SQL搜索標題字段與喜歡和定製訂購
我要產生結果的列表,列表的頭是
like 'st%'
,其餘的結果是
like '%st%'
結果如果我使用UNION使其能正確產生一個沒有重複的列表,但不是按照我想要的順序。
如果我使用UNION ALL,它會按照我想要的順序生成列表,但會有重複項。
我能夠使用這種查詢,還是我需要做另一種方式?
我有一個歌曲數據庫,需要實施搜索。SQL搜索標題字段與喜歡和定製訂購
我要產生結果的列表,列表的頭是
like 'st%'
,其餘的結果是
like '%st%'
結果如果我使用UNION使其能正確產生一個沒有重複的列表,但不是按照我想要的順序。
如果我使用UNION ALL,它會按照我想要的順序生成列表,但會有重複項。
我能夠使用這種查詢,還是我需要做另一種方式?
您可以在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
將首先放置比賽。
順便說一句,你不能取決於union
或union all
後的排序。 SQL表本質上是無序的。除非使用order by
子句(或MySQL中的group by
子句)明確訂購,否則SQL結果集本身是無序的。
您可以執行查詢來搜索數據庫中這些元素的相似度,並將它們分配給該變量,您可以使用相應的代碼對它們進行分類。
這很明顯。我的問題是看看是否可以在sql查詢中完成。 – Simon 2013-05-11 18:53:27