假設(shè)只有一個(gè)table,名為pages,有四個(gè)字段,id, url,title,body。里面儲(chǔ)存了很多網(wǎng)頁(yè),網(wǎng)頁(yè)的url地址,title和網(wǎng)頁(yè)的內(nèi)容,然后你用一個(gè)sql查詢將url匹配的排在最前,title匹配的其次,body匹配最后,沒(méi)有任何字段匹配的,不返回。
就是上面這道面試題,讓我想了一個(gè)下午,在網(wǎng)上找資料,最后用下面方法實(shí)現(xiàn)
SELECT *
FROM page where url like '%baidu%' or title like '%baidu%' or like ''
ORDER BY CHARINDEX('baidu', url) DESC, CHARINDEX('baidu', title) DESC,
????? CHARINDEX('baidu', body) DESC
但我感覺(jué)這種方法并不是最簡(jiǎn)單的,后來(lái)把這個(gè)方法發(fā)給面試的人,他給我了一種更簡(jiǎn)單方法,只要用基本的Sql語(yǔ)句就可以實(shí)現(xiàn)。代碼如下
select a.[id],a.mark from
(
select [page].[id],100 as mark from [page] where [page].[url] like '%baidu%'
union
select [page].[id],50 as mark from [page] where [page].[title] like '%baidu%'
union
select [page].[id],10 as mark from [page] where [page].[body] like '%baidu%'
) as a? order by mark desc
用union 實(shí)現(xiàn)聯(lián)合查詢,在每個(gè)查詢語(yǔ)句中定義一個(gè)臨時(shí)變量mark 并給mark賦值,在最后的輸出時(shí)采用mark來(lái)排序,這樣實(shí)現(xiàn)真的好簡(jiǎn)單。其實(shí)這都考驗(yàn)我們對(duì)Sql的編成思想。
posted on 2006-09-19 11:28
水煮三國(guó) 閱讀(544)
評(píng)論(0) 編輯 收藏 所屬分類:
Sybase