Инверсия SQL LIKE "% value%" - PullRequest
       7

Инверсия SQL LIKE "% value%"

5 голосов
/ 04 декабря 2008

У меня есть таблица MySQL, содержащая доменные имена:

+----+---------------+
| id | domain        |
+----+---------------+
|  1 | amazon.com    |
|  2 | google.com    |
|  3 | microsoft.com |
|    |     ...       |
+----+---------------+

Я бы хотел, чтобы в этой таблице можно было найти полное имя хоста (например, www.google.com). Если бы в таблице был полный URL, то было бы наоборот:

SELECT * FROM table WHERE domain LIKE '%google.com%'

Но обратное не так просто. В настоящее время я думаю о том, чтобы найти полное имя хоста, затем постепенно убирать каждую часть домена и искать снова. (т. е. ищите «www.google.com», затем «google.com»)

Это не особенно эффективно или умно, должен быть лучший способ. Я уверен, что это общая проблема, и ее легко решить!

Ответы [ 3 ]

14 голосов
/ 04 декабря 2008

Вы также можете использовать столбец справа от аналогичного:

SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain);

или

SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain, '%');

Это не особенно эффективно, но работает.

2 голосов
/ 04 декабря 2008

В mysql вы можете использовать регулярные выражения (RLIKE) для выполнения совпадений. Учитывая эту способность, вы можете сделать что-то вроде этого:

SELECT * FROM table WHERE 'www.google.com' RLIKE domain;

Похоже, что способ реализации RLIKE достаточно умен, чтобы рассматривать точку в этом поле (обычно подстановочный знак в regex) как буквальную точку.

MySQL's включение регулярных выражений дает вам очень мощную возможность разбора и поиска строк. Если вы хотите узнать больше о регулярных выражениях, просто Google "regex". Вы также можете воспользоваться одной из следующих ссылок:

http://en.wikipedia.org/wiki/Regular_expression

http://www.regular -expressions.info /

http://www.codeproject.com/KB/string/re.aspx

0 голосов
/ 04 декабря 2008

Вы можете использовать небольшую манипуляцию строкой SQL для генерации эквивалента строки .EndsWith ():

SELECT * FROM table WHERE  
substring('www.google.com',
len('www.google.com') - len([domain]) ,
len([domain])+1) = [domain]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...