2008-12-03 55 views
4

我有一個包含MySQL表域名:逆的SQL LIKE「%值%」

+----+---------------+ 
| id | domain  | 
+----+---------------+ 
| 1 | amazon.com | 
| 2 | google.com | 
| 3 | microsoft.com | 
| |  ...  | 
+----+---------------+ 

我希望能夠通過此表爲一個完整的主機名進行搜索(即「www.google .COM')。如果它是另一種方式圓所在的表包含完整的URL我會使用:

SELECT * FROM table WHERE domain LIKE '%google.com%' 

但逆也不是那麼簡單。我現在的想法是要搜索的全名,然後逐步剝離域的各個部分,並重新搜索。 (即搜索「www.google.com」,然後「google.com」)

這不是特別有效的或高明,必須有更好的方法。我相信這是一個常見問題,無疑很容易解決!

回答

13

您可以在想得太權使用列:

SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain); 

SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain, '%'); 

這不是特別有效,但它的工作原理。

+0

說的那麼可怕它很酷:-) – 2008-12-03 21:40:02

+0

正義還是邪惡......他們都是優良的選擇。 – Greg 2008-12-03 21:49:06

0

你可以使用一個位的SQL字符串操作產生string.EndsWith()相當於:

SELECT * FROM table WHERE 
substring('www.google.com', 
len('www.google.com') - len([domain]) , 
len([domain])+1) = [domain] 
2

mysql你可以使用正則表達式(RLIKE)進行匹配。鑑於這種能力,你可以做這樣的事情:

SELECT * FROM table WHERE 'www.google.com' RLIKE domain; 

看來,這樣RLIKE已經實現了它甚至足夠聰明來治療點在該領域(通常在regex通配符)作爲文本點。

MySQL's包含正則表達式的爲您提供了一個非常強大的分析和搜索字符串的能力。如果您想了解更多關於正則表達式,只是谷歌「regex」。您也可以使用這些鏈接之一:

http://en.wikipedia.org/wiki/Regular_expression

http://www.regular-expressions.info/

http://www.codeproject.com/KB/string/re.aspx