2010-11-16 87 views
0

我想在mysql數據庫上做一個簡單的select語句。在MsSql中它工作正常,但我無法讓它在MySql中工作。Select statement MySql

我想要做的是以下幾點:

可以說我有一個表(名爲TestTable)是這樣的:

ID  | DOMAIN    | NrOfVisitors 
-------------------------------------------- 
1  | something.com  | 435 
-------------------------------------------- 
2  | blabla.com   | 231 

而且我有一個字符串,如http://bla.ttt.something.com/blabla

現在我想傳入字符串,並選擇域中字符串所在的行。 在MSSQL中,我可以做到以下幾點:

SELECT * 
    FROM TestTable 
    WHERE "http://bla.ttt.something.com/blabla" LIKE "%" DOMAIN "%" 

但在MySQL返回0行。我究竟做錯了什麼?

在此先感謝!

+0

也許你應該先提取主機。這將使查找更容易。 – Gumbo 2010-11-16 16:45:03

回答

3
SELECT * FROM TestTable WHERE "http://bla.ttt.something.com/blabla" LIKE CONCAT("%",DOMAIN,"%") 
+0

哇謝謝:D我忘了CONCAT:D – CyberK 2010-11-16 16:41:53

2

那麼,對於一個強大的解決方案的第一步是(使用parse_url)提取字符串中的域:

$string = 'http://bla.ttt.something.com/blabla'; 
$domain = parse_url($string, PHP_URL_HOST); 

然後,假設你想匹配的頂部兩層該域只(something.com),你需要提取從域...

$parts = explode('.', $domain); 
$top2parts = array_slice($parts, -2); 
$rootDomain = implode('.', $top2parts); 

然後,我們構建查詢:

$sql = "SELECT * 
    FROM TestTable 
    WHERE domain LIKE '%".mysql_real_escape_string($rootDomain)."%'"; 

這應該爲你做。對於給定的輸入,它會產生:

SELECT * 
    FROM TestTable 
    WHERE domain LIKE '%something.com%' 

當然,你可以做它的其他方式,並通過concating通配符域搜索:

SELECT * 
    FROM TestTable 
    WHERE CONCAT('%', domain, '%') LIKE 'http://bla.ttt.something.com/blabla' 

但是與該問題出通過示例網址:http://foo.bar/blah/something.com.html ...這將返回something.com的誤報,因爲它位於URL中,但它不在域中...因此,避免這種情況的一種方法(仍然搜索完整域)將會是做一個組合:

$string = 'http://bla.ttt.something.com/blabla'; 
$domain = parse_url($string, PHP_URL_HOST); 
$sql = "SELECT * 
    FROM TestTable 
    WHERE CONCAT('%', domain, '%') LIKE '".mysql_real_escape_string($domain)."'"; 

這對於這種情況下會產生:

SELECT * 
    FROM TestTable 
    WHERE CONCAT('%', domain, '%') LIKE 'bla.ttt.something.com'