2010-08-24 21 views
1

我有一個包含網站列表的表。將www.website.com和website.com與sql匹配,如

我有一個sql變量@url,我想選擇網站等於@url的所有行。但是,如果沒有子域,我想匹配www和根域。

所以,如果@ URL = 'http://website.com '應該同時匹配' http://website.com '和' http://www.website.com'

目前,我正在做

select * from websites a 
where b.archived = 0 
and @url like replace(a.WebsiteURL, '*', '%') 
order by newid() 

顯然不考慮WWW問題。

任何想法如何解決這個問題?

我想強制增加www。如果它不存在(並且url沒有子域),則將其添加到數據庫中。但是,那些實際上沒有www並將www重定向到根的網站呢?

+3

我也許錯了,但www和缺乏www可以指向不同的地方? – PostMan 2010-08-24 20:48:51

+0

你嘗試過嗎? 和(@url like替換(a.WebsiteURL,'*','%') 或('www。'+ @url)like替換(a.WebsiteURL,'*','%')) – Holystream 2010-08-24 20:51:00

+0

@PostMan ,是的,「www」只是一個標準。 'http:// marsjug.org'和'http:// www.marsjug.org'不會重定向到同一個網站(並且這是一個錯誤...) – 2010-08-24 20:53:16

回答

0

你可以劃分WebsiteURL列到WebsiteScheme,WebsiteSubdomain,WebsiteDomain列。因此,檢查將轉向:

@url = WebsiteScheme + '://' + WebsiteSubdomain + '.' + WebsiteDomain OR 
@url = WebsiteScheme + '://' + WebsiteDomain AND WebsiteSubdomain = 'www' 
0
http://website.com 
    http://www.website.com 

反轉字符串

moc.etisbew//:ptth 
moc.etisbew.www//:ptth 

- 一旦這樣做是爲了輸入字符串

Search Str = replace(replace(Str,'www',''),'http://') 

反向輸入字符串以及

moc.etisbew 

現在您可以搜索並使用索引。您可以創建一個更新觸發器來自動填充反向字段,該字段從不向用戶顯示,只有可索引字段。

有些奇怪,但應該給你相當不錯的查找性能

+0

。你能向我解釋逆轉嗎? – Tommy 2010-08-25 02:40:44

+0

如果您需要存儲這兩個版本的網站,那麼這種技術使得網站的最右側部分稱爲查找關鍵字。查找部分名稱時,例如返回JONES,JOHNSON等的'JO *'。通過反轉網站和查找字符串,* .COM(以.COM結尾的所有網站)的通配符查找變爲moc。* ,這可以使用索引完成。在第一個位置使用通配符時,需要進行表掃描。 – Sparky 2010-08-25 11:17:32

相關問題