mySql从“domain.com”搜索“sub.domain.com”

时间:2016-01-20 14:36:47

标签: php mysql email where-clause email-validation

综述

在MySql表中,行是

  • domain.com
  • domain.net
  • stackoverflow.com

我想从表中搜索“sub.domain.com”......怎么样?

详情: 嗨,我正在研究电子邮件验证脚本,

我有一个列表中的黑名单域列表... 现在我想转移到数据库...

但有些逻辑问题..

以前的代码,包含数组

$blacklist_domains  = array("domain.com","domain.net");
    foreach($blacklist_domains as $val) {
        //$domain can be with or without sub domain
        if( preg_match( "/$val/", $domain)){
               return true;
        }
    }

这里的工作是,我有域名列表, 但是当我想搜索域时,它可能是域/子域(我的理论上,但这个理论仍然不正确) 所以这个循环搜索域

中的黑名单
foreach($blacklist_domains as $val) {
  //$domain can be with or without sub domain
  if( preg_match( "/$val/", $domain)){
         return true;
  }
}

**run time concept:**

//preg_match( "/blacklist/", "find this");
if( preg_match( "/domain.com/", "sub.domain.com")){
    return true;
}

问题: 现在,我想将这个概念转移到数据库...... 在数据库中,我的行是,

  • domain.com
  • domain.net

现在我想在表

中搜索sub.domain.com

如何或更好的主意?

  

我的目标是,从我的黑名单域中查看电子邮件黑名单域名   数据库中的列表

谢谢

1 个答案:

答案 0 :(得分:0)

如果您的数据库中有sub.domain.com并且正在搜索domain.com,那么您将使用LIKE

SELECT * FROM domains WHERE domain LIKE '%domain.com%';

但你没有

这意味着,您需要“反转”LIKE

SELECT * FROM domains WHERE 'sub.domain.com' LIKE CONCAT('%', domain, '%');

为了提高代码效率,您甚至可以使用COUNT()来获取直接在代码中使用的行数:

SELECT COUNT(*) AS count FROM domains WHERE 'sub.domain.com' LIKE CONCAT('%', domain, '%');