【问题标题】:mySql search "sub.domain.com" from "domain.com"mySql 从“domain.com”搜索“sub.domain.com”
【发布时间】:2016-04-26 11:16:06
【问题描述】:

夏天:

MySql 表中的行是

  • 域名.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;
}

问题: 现在,我想将此概念移至数据库... 在数据库中我的行是,

  • 域名.com
  • domain.net

现在我想在表中搜索 sub.domain.com

如何或有更好的主意?

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

谢谢

【问题讨论】:

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


【解决方案1】:

如果您的数据库中有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, '%');

【讨论】:

  • 谢谢你,你给了我答案,但我不知道为什么有人给你负分...!!!
猜你喜欢
  • 2017-09-02
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多