metrpro

Исчезает улица при редактировании объявления

Recommended Posts

Пакетный импорт объявлений через парсер sitebill имеет следующую особенность - если улица в импортируемом объявлении уже имеется в базе адресов (проверяется ГОРОД+УЛИЦА), то указывается совершенно правильный id улицы. Но! Если улицы нет, то она добавляется в базу данных БЕЗ привязки к городу, даже если тот есть в базе данных и явно прописан в самом объявлении.

Имеем, пример 1: город - "ЯЛТА", улица - "Садовая ул.", и то, и другое в базе уже есть, вновь созданное объявление будет иметь правильные id города и улицы.

Пример 2: город - "ЯЛТА", улица - "Улица Садовая". Город есть, а улица, предположим, в базе отсутствует. Получаем новое объявление - указан id города Ялта, и id новой улицы. Новая улица тоже добавлена в базу данных, но она НЕ ПРИВЯЗАНА к городу Ялта, значение city_id этой улицы - null. Т.е. эта новая улица и существующий город связаны между собой лишь на уровне объявления, а не на уровне справочников.

В результате у меня уже около 3,5К улиц, висящих в воздухе, непонятно из какого города. На каждой странице, где в форме поиска есть возможность выбора улицы, уже по факту загрузки страницы мы имеем автоматически вываленные улицы (где город null), что утяжеляло страницу на 700 Кб.

Как же это решалось. Форма sql-запроса в редакторе форм была заменена на:

select * from re_street where name  null order by name

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

Но это породило проблему. Как только открываешь ранее созданное объявление с нормальной улицей (привязанной к городу) для редактирования, в боксе улиц - нет значения. Они не подгружаются туда на момент открытия страницы редактирования. Бокс города - правильный, с нужным городом, а бокс улиц - пустой. Меняем города на другой, а потом снова выставляем нужный (пусть будет ЯЛТА). Улицы подгружаются. Но та, что была указана изначально, не выделена.

Пользователи редактируют свои объявления, и не замечают, что остаются без улиц.

Очень важно, чтобы улица, ранее указанная в объявлении при его создании, никуда не девалась при редактировании!

Для меня это тоже важно, потому что я открываю сейчас для индексации поисковиками grid'ы объявлений по городам+улицам (у меня теперь генерируются меты для этих связок вида "Улица ___, г. ___ - объявления.... [страница __]", обходя проблему дублей).

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

Однако, проблему надо решить! Пользователи жалуются!!!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, metrpro сказал:

А сейчас то что делать?

Попробуйте вручную привести в порядок базу свою. Проставьте нужные связки для улиц у которых нет связки с городом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, rumantic сказал:

Попробуйте вручную привести в порядок базу свою. Проставьте нужные связки для улиц у которых нет связки с городом.

Без проблем - их там всего порядка 4К. Пять минут работы.

Меня волнует другое - не должна исчезать текущая улица при редактировании объявления!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 часа назад, metrpro сказал:

Без проблем - их там всего порядка 4К. Пять минут работы.

Меня волнует другое - не должна исчезать текущая улица при редактировании объявления!

Она исчезает, потому что запись создана автоматически. И у нее еще нет реальной привязки к городу. Поэтому выбирая город, автоматика не видя привязанных улиц обнуляет выбор улицы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
11 минуту назад, rumantic сказал:

Она исчезает, потому что запись создана автоматически. И у нее еще нет реальной привязки к городу. Поэтому выбирая город, автоматика не видя привязанных улиц обнуляет выбор улицы.

Исчезает улица в объявлениях, созданных пользователями ВРУЧНУЮ, с улицами, добавленными ВРУЧНУЮ и ПРИВЯЗАННЫМИ к городу.

Дима, не надо уходить от проблемы, надо её решать. Отписки ни к чему.

Актуально, улицы все так же исчезают!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 минуты назад, metrpro сказал:

Исчезает улица в объявлениях, созданных пользователями ВРУЧНУЮ, с улицами, добавленными ВРУЧНУЮ и ПРИВЯЗАННЫМИ к городу.

Дима, не надо уходить от проблемы, надо её решать. Отписки ни к чему.

Актуально, улицы все так же исчезают!

Тогда надо конкретные данные посмотреть, ИД объявлений.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
4 минуты назад, rumantic сказал:

Тогда надо конкретные данные посмотреть, ИД объявлений.

Любое.

Например, вот страница улицы, добавленной вручную - все тамошние объявления рукотворные, улица рукотворная, привязана к городу Феодосия.

И все они при редактировании теряют эту улицу - при этом номер дома остаётся, остаётся город и геокоординаты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
24 минуты назад, metrpro сказал:

Любое.

Например, вот страница улицы, добавленной вручную - все тамошние объявления рукотворные, улица рукотворная, привязана к городу Феодосия.

И все они при редактировании теряют эту улицу - при этом номер дома остаётся, остаётся город и геокоординаты.

Извиняюсь, видимо вам неправильно запрос сказал.

Вот так правильный запрос для улиц, поправил вам, теперь показывает улицы.

select * from re_street where name is not null order by name

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, rumantic сказал:

Вот так правильный запрос для улиц, поправил вам, теперь показывает улицы.

Так-то да, теперь при редактировании объявления улица не пропадает.

Но и на странице редактирования объявления, и в любой поисковой форме, где можно указать улицу поиска, теперь опять вываливаются улицы с городами null.

Т.е. мы вернулись на исходную.

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

Дима, прошу посмотреть ещё раз, повнимательнее.

 

UPDATE:

я попробовал в Редакторе форм/data/street_id/ поменять mysql-запрос на следующий:

select * from re_street where name is not null AND city_id is not null order by name

Результат не увидел, но смысл-то ведь какой-то такой должен быть, нет?

Кстати, замена там же на запрос старого вида - 

select * from re_street where name  null order by name

- тоже на дает никаких изменений почему-то. Не там меняю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, metrpro сказал:

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

Запрос тогда должен быть 

select * from re_street where name is not null AND city_id <> 0 order by name

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, rumantic сказал:

Запрос тогда должен быть 

shit, опять пропадает при редактировании...

хотя в таблица поисковых форм подгружается теперь сразу. список улиц к городу smarty

Но мы опять на месте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, metrpro сказал:

shit, опять пропадает при редактировании...

хотя в таблица поисковых форм подгружается теперь сразу. список улиц к городу smarty

Но мы опять на месте.

Тогда так попробуйте

select * from re_street where name is not null AND city_id != 0 order by name

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, rumantic сказал:

select * from re_street where name is not null AND city_id != 0 order by name

Это я пробовал уже еще раньше. Результат аналогичен тому, что вылезают все улицы, в т.ч. те, где город не указан.

 

UPDATE:

Так, мы что-то не то ищем... Оказывается, для некоторого кол-ва улиц парсер прописал города (но тогда непонятно, почему не для всех).

И дуром вываливаются эти улицы в соответствующий бокс даже тогда, когда город в нем не указан. Т.е., скажем, в форме поиска в городском боксе стоит "укажите город" или "ЯЛТА", а боксе улиц уже вывалены все 100% улиц (независимо от выбора в боксе города).

Сейчас запрос стоИт следующий: select * from re_street where name is not null AND city_id>0 order by name

Надобно - если город не указан, то и улицы никакие не подгружаются. Если выбран город, то отображаются ТОЛЬКО ЕГО улицы. Вот.

Иначе, будет, как на скрине:

alotofstreets.jpg

alotofstreets2.jpg

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
8 минут назад, metrpro сказал:

Это я пробовал уже еще раньше. Результат аналогичен тому, что вылезают все улицы, в т.ч. те, где город не указан.

Ну тогда у меня варианты кончились, только править данные надо в улицах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, rumantic сказал:

Ну тогда у меня варианты кончились, только править данные надо в улицах.

Дима, я сделал апдейт предыдущего сообщения, прошу посмотреть. Там в другом дело

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
13 минуты назад, metrpro сказал:

Надобно - если город не указан, то и улицы никакие не подгружаются. Если выбран город, то отображаются ТОЛЬКО ЕГО улицы. Вот.

Иначе, будет, как на скрине:

 

Боюсь задеть ваши чувства и услышать снова гневные сообщения про плохую поддержку, но НАДОБНО это в раздел фриланса.

Вы меня извините, но в базовой версии пока за 6 лет такого никто не спрашивал, поэтому и нет этого в базовой версии.

Это платная доработка.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, rumantic сказал:

Вы меня извините, но в базовой версии пока за 6 лет такого никто не спрашивал, поэтому и нет этого в базовой версии.

А ведь мы еще в начале пути год назад обсуждали масштабируемость проекта! Но это лирика.

 

Так, по-порядку, правильно ли я понимаю предполагаемый функционал?

При редактировании/добавлении объявления либо работе в форме поиска:

- выбрав город, мы автоматически получаем заполненный бокс с улицами этого города

- если город не выбран, то и бокс с улицами пустой

 

Это так, я ничего не пропустил?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, metrpro сказал:

А ведь мы еще в начале пути год назад обсуждали масштабируемость проекта! Но это лирика.

 

Так, по-порядку, правильно ли я понимаю предполагаемый функционал?

При редактировании/добавлении объявления либо работе в форме поиска:

- выбрав город, мы автоматически получаем заполненный бокс с улицами этого города

- если город не выбран, то и бокс с улицами пустой

 

Это так, я ничего не пропустил?

Извиняюсь, вот еще что забыл

http://wiki.sitebill.ru/index.php?title=Tlocation

Это пробовали?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, rumantic сказал:

Это пробовали?

Если я правильно понял функционал, то нет, не пробовал - я в свое время отказался от регионов/районов, у меня все улицы привязаны напрямую к городу. И, признаться честно, я не очень понимаю, как это может решить существующую проблематику.

Исправленный запрос, который отсеивает улицы, в которых не указан город, это хорошо, но это решает только часть проблемы.

Главный вопрос, который остался, это почему независимо от того, какой город мы указываем в selectbox city_list, в selectbox street_list указываются ВСЕ существующие улицы (в которых city_id>0).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 минуты назад, metrpro сказал:

Если я правильно понял функционал, то нет, не пробовал - я в свое время отказался от регионов/районов, у меня все улицы привязаны напрямую к городу. И, признаться честно, я не очень понимаю, как это может решить существующую проблематику.

Исправленный запрос, который отсеивает улицы, в которых не указан город, это хорошо, но это решает только часть проблемы.

Главный вопрос, который остался, это почему независимо от того, какой город мы указываем в selectbox city_list, в selectbox street_list указываются ВСЕ существующие улицы (в которых city_id>0).

1. Вот как раз tlocation и позволит не видеть улицы до выбора города.

2. Попробуйте условие все-таки city_id != 0, так как > этот символ может не проходить в системе из-за фильтра тегов.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, rumantic сказал:

2. Попробуйте условие все-таки city_id != 0, так как > этот символ может не проходить в системе из-за фильтра тегов.

Так. Это решает ситуацию в редакторе объявлений в админ-панели, но приводит к очень и очень странному поведению поисковых форм на самом сайте.

Устаканивается не математическим условием в запросе, а определением "не нуль" - city_id is not null

Только что, rumantic сказал:

1. Вот как раз tlocation и позволит не видеть улицы до выбора города.

Как мне с помощью tlocation решить проблему того, что все имеющиеся улицы вываливаются в street_list когда значение city_list не задано? Т.е. стоит "выберите город", а в "выберите улицу" уже вывалены все улицы, где city_id не нуль?

 

PS: Дима, мы таким макаром потихоньку-то проблему решим - приятно работать, когда разработчики подключаются к решению вопроса.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1. tlocation умер, как автономный элемент, из-за ужасающей сложности работы с ним везде, кроме формы.

2. сравнение с NULL не имеет никакого смысла. все поля, кроме геодата, создаются с признаком NOT NULL. Т.е. все они не будут равны NULL. Они будут равны "какой-то строке", "пустой строке", "нулю", "числу", иному дефолтному значению, но никогда не будут равны NULL. Условие "IS NOT NULL" всегда будет промахиваться на пустой строке, так как NULL(отсутствие значения) не эквивалентно пустой строке и уже тем более не равно нулю. Если такое условие присутствует, то нужно либо делать колонку, по которой производится такая прроверка с поддержкой NULL, либо приводить колонку к ожидаемому значению и сравнивать с его пустым эквивалентом. Для поле выбора по списку как улицы, города и прочее оптимальным типом колонки является INT cо значением по-умолчанию 0. Тогда условие "IS NOT NULL" превратится в более адекватное "!=0".

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас