#mysql
#mysql
Вопрос:
У меня есть поле MySQL URL
типа Varchar.
Возможно ли с помощью одного запроса MySQL вернуть все записи, где строковое значение URL
является подстрокой другого URL
значения записи, и отобразить как подстроки, так и полные записи строк?
Ответ №1:
Вы объединяете таблицу с самой собой. Что-то вроде:
ВЫБЕРИТЕ t1.URL, t2.URL В КАЧЕСТВЕ SUBURL ИЗ mytable t1, mytable t2 ГДЕ INSTR(t1.URL, t2.URL) > 0 И t1.ID < t2.ID
Обратите внимание, что запрос имеет сложность N ^ 2, а сопоставление строк происходит медленно. Ожидайте ужасную производительность на больших таблицах.
Ответ №2:
В общем, ответ «Да» с использованием функций INSTR() или LOCATE(). Но это зависит от того, как хранятся ваши URL-адреса. Такие вещи, как «http: //», поддомены и тому подобное, могут дать вам много ложных срабатываний или ложноотрицательных результатов. Не false в том смысле, что INSTR () сломан, но false в том смысле, что он не будет делать то, что вы могли бы от него захотеть.
Комментарии:
1. Я не возражаю против ложных срабатываний, пока я получаю истинные положительные результаты. Мне было бы интересно посмотреть, как вы напишете запрос, используя LOCATE().
2. LOCATE() и INSTR() работают практически одинаково. Порядок аргументов отличается, и LOCATE() позволяет вам указать начальную позицию, которая, вероятно, не имеет значения в вашем случае. (Но мы не видели никаких ваших данных.) Смотрите, как Elad использует INSTR() .