У меня есть таблица 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")
Это не особенно эффективно или умно, должен быть способ получше. Я уверен, что это обычная проблема, и ее легко решить!


Вы также можете использовать столбец справа от подобного:
SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain);
или же
SELECT domain FROM table WHERE 'www.google.com' LIKE CONCAT('%', domain, '%');
Это не особенно эффективно, но работает.
Здорово. Я думал поставить% с именем столбца, но не знал, как это объединить. Спасибо.
Ой, сильно нравится. Долго искал. :) Будьте здоровы.
Вы можете использовать небольшие манипуляции со строкой SQL, чтобы сгенерировать эквивалент string.EndsWith ():
SELECT * FROM table WHERE
substring('www.google.com',
len('www.google.com') - len([domain]) ,
len([domain])+1) = [domain]
В mysql вы можете использовать регулярные выражения (RLIKE) для поиска совпадений. Учитывая эту способность, вы могли бы сделать что-то вроде этого:
SELECT * FROM table WHERE 'www.google.com' RLIKE domain;
Похоже, что способ реализации RLIKE даже достаточно умен, чтобы рассматривать точку в этом поле (обычно это подстановочный знак в regex) как буквальную точку.
Включение регулярных выражений в MySQL's дает вам очень мощные возможности для синтаксического анализа и поиска строк. Если вы хотите узнать больше о регулярных выражениях, просто погуглите "regex". Вы также можете использовать одну из этих ссылок:
http://en.wikipedia.org/wiki/Regular_expression
Добро или зло ... Оба варианта хороши.