Сопоставьте как www.website.com, так и website.com с sql как - PullRequest
1 голос
/ 25 августа 2010

У меня есть таблица, которая содержит список сайтов.

У меня есть переменная sql @url, я хочу выбрать все строки, где веб-сайт равен @url. Однако, если нет поддоменов, я хочу сопоставить www и корневой домен.

Итак, если @url = 'http://website.com', оно должно совпадать с' http://website.com' и 'http://www.website.com'

Я сейчас занимаюсь

select * from websites a
where b.archived = 0
and @url like replace(a.WebsiteURL, '*', '%')
order by newid()

Очевидно, что это не учитывает проблему с www.

Есть идеи, как решить эту проблему?

Я думал о силе, добавляющей www. если он не существует (и URL не имеет поддомен), прежде чем добавить его в базу данных. Но как насчет сайтов, которые на самом деле не имеют www и перенаправляют www в корень?

Ответы [ 3 ]

1 голос
/ 25 августа 2010

Вы должны использовать функцию RegexMatch (или аналогичную) в SQL.С тестом регулярного выражения "http://( ?: www.)? What.com " вы должны сопоставить "http://whatever.com"" и "http://www.whatever.com".

0 голосов
/ 25 августа 2010

Вы можете разделить столбец WebsiteURL на столбцы WebsiteScheme, WebsiteSubdomain, WebsiteDomain. Таким образом, проверка превратится в:

@url = WebsiteScheme + '://' + WebsiteSubdomain + '.' + WebsiteDomain OR 
@url = WebsiteScheme + '://' + WebsiteDomain AND WebsiteSubdomain = 'www'
0 голосов
/ 25 августа 2010
  http://website.com
   http://www.website.com

Перевернуть струны

moc.etisbew//:ptth
moc.etisbew.www//:ptth

- сделать это один раз для ввода строки

Search Str = replace(replace(Str,'www',''),'http://')

Обратный ввод строки также

moc.etisbew

Теперь вы можете искать и использовать индекс. Вы можете создать триггер обновления для автоматического заполнения обратного поля, которое никогда не показывается пользователю, только индексируемое поле.

Немного странно, но должно дать вам довольно хорошую производительность поиска

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...