MySQL: нужно выбрать список уникальных названий улиц из таблицы адресов

0

У меня есть таблица, которая содержит, среди прочего, поле, указывающее адрес улицы некоторых мест. Я пытаюсь найти способ вернуть подмножество JUST the NAMES из этой таблицы, когда они соответствуют определенному поисковому запросу.

Пока у меня это:

SELECT 'street' FROM 'addresses' 
WHERE ('street' LIKE '%searchTerm%')
GROUP BY 'street' 
ORDER BY LOCATE('searchTerm','street') 
LIMIT 10;

Что все в порядке, за исключением, конечно, того, что у него есть нежелательный побочный эффект, возвращающий весь адрес улицы, включая дом #, где ВСЕ, что я хочу, это имя самой улицы. Однако я не могу понять, как я могу удалить любые ведущие числа, тире или # -signs и собрать JUST имена улиц из запроса?

Есть ли способ сделать это? Или я застрял, просто управляя результатами в коде (PHP) после извлечения данных?

Спасибо!

Теги:

2 ответа

0
Лучший ответ

Хорошо, поэтому, выслушав вышеприведенные комментарии и рекомендации и дайте подробные сведения о моем конкретном случае использования (где я обычно могу просто предположить, что что-либо до того, как первое пространство в строке является одноразовой информацией), я получил следующий запрос: который на самом деле работает достаточно хорошо:

SELECT
    SUBSTRING('street',LOCATE(' ','street')+1,LENGTH('street')) AS 'streetSearch'
FROM 'addresses'
WHERE 'street' LIKE ('%searchTerm%')
GROUP BY SUBSTRING('street',LOCATE(' ','street')+1,LENGTH('street'))
ORDER BY LOCATE('searchTerm','street')
LIMIT 10;

Хотя я понимаю, что тонна вещей воспринимается как нечто само собой разумеющееся, учитывая данные в таблице, с которой я работаю, это решение работает> 99% времени (т.е. Оно не произвело никаких ложных срабатываний/негативов в тестирование до сих пор).

Спасибо!

1

В моем понимании вам просто нужно отделить все название улицы, найдя ближайшие пробелы шаблона "% searchTerm%". Это возможно в MySQL, однако я бы рекомендовал сделать это в коде. В случае, когда вы действительно нуждаетесь в нем на уровне базы данных, я бы включил ее в функцию.

Это код, который работает в MySQL. (Можно использовать его в запросе после некоторых модификаций - однако я бы не рекомендовал его :))

SET @STREET='tree';
SET @HAYSTACK='Some man lives at some street 15 in some town in some country';
SET @STREET_START=locate(@STREET, @HAYSTACK) ;
-- first space
SET @FULL_STREET_START=@STREET_START - (SELECT locate(' ', 
reverse(substring(@HAYSTACK,1, @STREET_START )))) + 1;
-- last space
SET @FULL_STREET_END=LENGTH(@STREET) + locate(' ', 
substring(@HAYSTACK,@STREET_START+LENGTH(@STREET))) + 1;
SELECT substring(@HAYSTACK, @FULL_STREET_START, @FULL_STREET_END);
-- result
+------------------------------------------------------------+
| substring(@HAYSTACK, @FULL_STREET_START, @FULL_STREET_END) |
+------------------------------------------------------------+
|  street                                                    |
+------------------------------------------------------------+

Ещё вопросы

Сообщество Overcoder
Наверх
Меню