【问题标题】:Select statement MySql选择语句 MySql
【发布时间】:2010-11-16 16:35:55
【问题描述】:

我正在尝试在 mysql 数据库上执行一个简单的选择语句。在 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 行。我做错了什么?

提前致谢!

【问题讨论】:

  • 也许你应该先提取主机。这将使查找更容易。

标签: php mysql


【解决方案1】:
SELECT * FROM TestTable WHERE "http://bla.ttt.something.com/blabla" LIKE CONCAT("%",DOMAIN,"%")

【讨论】:

    【解决方案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'
    

    但是示例 URL 显示了这个问题: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'
    

    【讨论】:

      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-27
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多