Summery:
В таблице MySql строки
Я хочу найти «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;
}
Вопрос:
Теперь я хочу перенести эту концепцию в базу данных …
в базе данных мои строки,
Теперь я хочу искать sub.domain.com в таблице
Как ИЛИ какая-нибудь лучшая идея?
Моя цель состоит в том, чтобы просто проверить домен черного списка электронной почты из моего домена черного списка
список в базе данных
Спасибо
Если бы вы имели 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, '%');
Других решений пока нет …