Сравнить две строки в MySQL

#mysql

#mysql

Вопрос:

Мой текущий запрос (не работает)

 SELECT url
FROM table
WHERE
    'http://www.longurl.com/some/string' like '%' . url . '%'
  

таблица

 url
longurl.com
  

Я пытаюсь сопоставить запись в «таблице» для longurl.com с любым сравниваемым URL, который содержит longurl.com .

Должны совпадать сравниваемые URL-адреса, такие как:

 http://www.longurl.com/some/string
http://longurl.com
http://longurl.com/some/string
  

В этом примере PHP сравнивать очень просто:

 $url = "http://www.longurl.com/some/string";    
if(strstr($url, 'longurl.com')) {
    echo "success";
} else {
    echo "failure";
}
  

Комментарии:

1. Разве это не должно быть LIKE (в верхнем регистре)?

2. можете ли вы сделать это без http? %//longurl.com /% Возможно, это: сбивает с толку анализатор.

3. вы пробовали ‘%longurl.com /%’

4. sql не чувствителен к регистру… некоторым людям просто легче читать, поэтому они так кодируют… Я лично ничего не пишу с заглавной буквы

5. Нет, как ‘% longurl.com % ‘ не возвращает совпадение

Ответ №1:

Хорошо, а как насчет:

 SELECT url 
  FROM table 
 WHERE INSTR('http://www.longurl.com/some/string', url) > 0
  

(Форматирование не сработало так хорошо в комментариях, поэтому я добавил его снова в качестве ответа.)

Комментарии:

1. Это оружие выбора для поиска значения столбца где-нибудь в константе. Это также легче читать.

Ответ №2:

Если вам нужно получить все URL, содержащие longurl.com затем попробуйте использовать:

 SELECT url
FROM table
WHERE
url like '%longurl.com%'
  

Это должно сработать.

Ответ №3:

Попробуйте удалить или экранировать некоторые символы в вашей строке URL. ИЛИ опуская http: часть .. Я полагаю, что : это может сбивать с толку анализатор…

 so try   %//longurl.com/%
  

или даже

 %longurl.com%  if possible
  

или даже

 http://longurl.com/%
  

Комментарии:

1. Это не работает .. сопоставление longurl.com для %longurl.com/some/page % не соответствует. LIKE() здесь не является ответом.

Ответ №4:

это?

 SELECT url
FROM table
WHERE
    url like '%http://%longurl.com%'
  

или вы также можете использовать %longurl.com%

Комментарии:

1. используете ли вы параметры сортировки без учета регистра?

2. этот ответ не сработает, потому что средство сравнения для URL должно быть точно таким же, как в примерах, которые я предоставил для совпадений.. это динамическое значение из переменной PHP

Ответ №5:

Оператор конкатенации . не существует в MySQL, вместо этого вы должны использовать функцию CONCAT():

 SELECT url
FROM table
WHERE 'http://www.longurl.com/some/string' LIKE CONCAT('%', url, '%');
  

Ответ №6:

Как насчет этого:

 SELECT url 
FROM table
WHERE url LIKE '%longurl.com%string%'
  

или, чтобы быть похожим на ваш PHP:

 SELECT url 
FROM table
WHERE url LIKE '%longurl.com%'
  

Комментарии:

1. это не сработает, потому что longurl.com это не динамически вставляемый текст, часть «hxxp://www.longurl.com/some/string» является

Ответ №7:

Вы ищете:

 LIKE '%longurl.com%'
  

Комментарии:

1. этот ответ не сработает, потому что средство сравнения для URL должно быть точно таким же, как в примерах, которые я предоставил для совпадений.. это динамическое значение из переменной PHP