powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос по населенным пунктам
10 сообщений из 10, страница 1 из 1
Запрос по населенным пунктам
    #40013992
Prizzrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужны ваши светлые головы и опыт, который не пропьешь.

Есть табличка

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE TABLE `kss_settlements` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(256) DEFAULT NULL,
  `full_name` longtext,
  `ter_name` varchar(45) DEFAULT NULL,
  `code` varchar(13) DEFAULT NULL,
  `coordinate_json` json DEFAULT NULL,
  `coordinate` varchar(256) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `I_NAME` (`name`),
  KEY `I_CODE` (`code`),
  KEY `I_COORDINATE` (`coordinate`),
  FULLTEXT KEY `FT_NAME_FNAME` (`name`,`ter_name`,`full_name`)
) ENGINE=InnoDB AUTO_INCREMENT=213933 DEFAULT CHARSET=utf8;



В ней данные

idnamefull_nameter_namecodecoordinate_jsoncoordinate100802Массив Иваново Иваново-ДМассив Иваново Иваново-Д Садовое неком-е товарищество, Приозерский Район, Ленинградская ОбластьСадовое неком-е товарищество4701500077451NULLNULL68082ИвановоГород Иваново, Ивановская ОбластьГород3700000100000NULLNULL105069ИвановоДеревня Иваново, Город Егорьевск, Московская ОбластьДеревня5000003906100NULLNULL105684ИвановоДеревня Иваново, Город Руза, Московская ОбластьДеревня5000004507900NULLNULL.....................
Данных много. Мне надо выбирать из этой таблицы данные по 5 штук сортируя так, чтобы на первых местах всегда были строки где поде name совпадает с фильтром или включает его в начале строки, при этом города были на первом месте. При этом чтобы точное совпадение названия с полем name имело высший приоритет над строками где это поле просто входит в строку. Далее надо, чтобы если после названия в строке поиска начали вводить название территориальной единицы или области в которой находится искомое то оно тоже находилось.

В примерах:
Вводят слово "Иваново". Результат в порядке следования ID 68082->105069->105684->100802
Вводят слова "Иваново дер". Результат в порядке следования ID 105069->105684
Вводят слова "Иваново мос". Результат в порядке следования ID 105069->105684
Вводят слова "дер Иваново Егор". Результат 105069

Нужно это на сайте для выпадающей подсказки в поле выбора населенного пункта.

Табличка моя, могу её переделать, если надо. Сайт на php потому могу строку запроса форматировать с помощью php.

Нужны Ваши идеи. Сам в тупике.
...
Рейтинг: 0 / 0
Запрос по населенным пунктам
    #40014026
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Prizzrak
сортируя так, чтобы на первых местах всегда были строки где поде name совпадает с фильтром или включает его в начале строки

Код: sql
1.
ORDER BY name LIKE CONCAT(criteria, '%') DESC
...
Рейтинг: 0 / 0
Запрос по населенным пунктам
    #40014350
Prizzrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Prizzrak
сортируя так, чтобы на первых местах всегда были строки где поде name совпадает с фильтром или включает его в начале строки

Код: sql
1.
ORDER BY name LIKE CONCAT(criteria, '%') DESC



Ну зачем же было себя так утруждать и дочитывать до этой строки, особенно учитывая, что дочитывать Вы не собирались?
...
Рейтинг: 0 / 0
Запрос по населенным пунктам
    #40014385
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если Вам этого недостаточно, то, боюсь, что и полный ответ не поможет... Вы в курсе, что выражение в ORDER BY может состоять из нескольких последовательных выражений?
...
Рейтинг: 0 / 0
Запрос по населенным пунктам
    #40014424
Prizzrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Если Вам этого недостаточно, то, боюсь, что и полный ответ не поможет... Вы в курсе, что выражение в ORDER BY может состоять из нескольких последовательных выражений?

А вы попробуйте сделать полный ответ. В примере всего 4 случая. Будьте так любезны, покажите полный ответ хотя бы для этих 4-х случаев. В реальности их конечно больше, но на этих четырёх станет понятно основная идея Вашей рекомендации.
...
Рейтинг: 0 / 0
Запрос по населенным пунктам
    #40014431
Prizzrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Prizzrak
сортируя так, чтобы на первых местах всегда были строки где поде name совпадает с фильтром или включает его в начале строки

Код: sql
1.
ORDER BY name LIKE CONCAT(criteria, '%') DESC



Вообще идея интересная. У меня правда пока не получается все 4 примера получить, но часть получилось.
...
Рейтинг: 0 / 0
Запрос по населенным пунктам
    #40014436
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Prizzrak
А вы попробуйте сделать полный ответ. В примере всего 4 случая

Ну так распишите алгоритм чётко. Типа "1) сначала записи, которые ..., 2) затем записи, которые ..."
...
Рейтинг: 0 / 0
Запрос по населенным пунктам
    #40014439
Prizzrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Prizzrak
А вы попробуйте сделать полный ответ. В примере всего 4 случая

Ну так распишите алгоритм чётко. Типа "1) сначала записи, которые ..., 2) затем записи, которые ..."


А всё! Уже не надо! Вы мне уже помогли!

У меня вот что получилось:
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT *
FROM kss_settlements 
WHERE MATCH (name,ter_name,full_name) AGAINST('>"Иваново" <(+Иваново*)' IN BOOLEAN MODE) 
ORDER BY name LIKE "Иваново%" DESC, 
    ter_name="Город" DESC, 
    MATCH (name,ter_name,full_name) AGAINST('>"Иваново" <(+Иваново*)' IN BOOLEAN MODE) DESC 
LIMIT 0, 5;



И этого вполне достаточно!

Спасибо!
...
Рейтинг: 0 / 0
Запрос по населенным пунктам
    #40014443
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё в начало бы добавить

Код: sql
1.
ORDER BY name = "Иваново", name LIKE "Иваново%" DESC, ...


А то попадётся какое-нить Иваново-Марьинское, которое сейчас может запросто вылезти на самый верх.
...
Рейтинг: 0 / 0
Запрос по населенным пунктам
    #40014450
Prizzrak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
Ещё в начало бы добавить

Код: sql
1.
ORDER BY name = "Иваново", name LIKE "Иваново%" DESC, ...


А то попадётся какое-нить Иваново-Марьинское, которое сейчас может запросто вылезти на самый верх.

Добавил. Ещё раз спасибо!
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Запрос по населенным пунктам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]