选择语句MySql

时间:2010-11-16 16:35:56

标签: php mysql

我正在尝试在mysql数据库上做一个简单的select语句。在MsSql中它工作正常,但我不能让它在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行。我做错了什么?

提前致谢!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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%'

当然,您可以通过其他方式执行此操作,并通过将通配符与域名进行搜索来搜索:

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

但问题网址显示的问题是:http://foo.bar/blah/something.com.html ...这会为something.com返回误报,因为它在网址中,但它不在域中...因此,避免这种情况(同时仍在搜索完整域名)的一种方法是进行组合:

$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'