1. nordghost - 12 Ноября, 2015 - 22:36:25 - перейти к сообщению
Вопрос больше связан с логикой чем с языком программирования. Допустим у нас есть страна, в каждой стране есть область, в каждой области город, в каждом городе район, в каждом районе улица, и в каждой улице дом, а в каждом доме - квартира, и каждая из этих сущностей разделена по отдельным таблицам, и связаны с помощью ID. В один прекрасный момент нам необходимо все их показать пользователю (прям вот так как есть соблюдая вложенность), и первое что приходит в голову это использовать циклы. Сначала выбрать все страны, потом в каждой стране выбрать города, потом в каждом городе район, и в каждом районе улицу и т.д. Что мы имеем в итоге? Тучу запросов к MySQL и это может закончиться очень печально. Как можно оптимизировать данное действие что бы снизить нагрузку на MySQL?
2. LIME - 13 Ноября, 2015 - 11:15:39 - перейти к сообщению
Свести все в единую таблицу с полем "тип сущности"
Тоесть тип улица или страна или тд и тп
Реализовать в виде nested sets ...погуглить
Тогда можно будет тащить всю иерархию одним запросом
Или ветвь дерева
Второй вариант юзать кладр
Для кладр есть готовые решения
Зависит от движка
Тоже в гугл
Както так
(Добавление)
Nested sets это способ отображения иерархии в реляционной бд
Вернее одна из оптимизаций оного
Это так....для общего понимания
Тоесть тип улица или страна или тд и тп
Реализовать в виде nested sets ...погуглить
Тогда можно будет тащить всю иерархию одним запросом
Или ветвь дерева
Второй вариант юзать кладр
Для кладр есть готовые решения
Зависит от движка
Тоже в гугл
Както так
(Добавление)
Nested sets это способ отображения иерархии в реляционной бд
Вернее одна из оптимизаций оного
Это так....для общего понимания
3. Мелкий - 13 Ноября, 2015 - 11:21:17 - перейти к сообщению
nordghost пишет:
в каждом городе район, в каждом районе улица, и в каждой улице дом, а в каждом доме - квартира
Ох до чего же все эти гипотезы далеки от действительности.
Небось, ещё предполагаете, что номер дома - это цифра?
nordghost пишет:
все их показать пользователю
Нафига? Нафига юзеру все эти мегабайты информации?
Обычно дают выбрать страну. Затем аяксом подтягивают регионы. А лучше автокомплитом. Но не выгружают весь массив юзеру.
4. LIME - 13 Ноября, 2015 - 11:28:07 - перейти к сообщению
Мелкий пишет:
именноОх до чего же все эти гипотезы далеки от действительности.
Потому кривой кладр будет выходом я думаю
Мелкий пишет:
ну задачи всякие бываютОбычно дают выбрать страну. Затем аяксом подтягивают регионы. А лучше автокомплитом.
Например отобразить все офисы компании принимающие скидку по всему миру
Ну от балды
Но ты понял
(Добавление)
Мелкий пишет:
например в Зеленограде нет районовОх до чего же все эти гипотезы далеки от действительности.
Там кварталы и номер дома содержит в себе квартал
Тоесть не цифра
Это я пояснил типа какие грабли ожидают
5. nordghost - 13 Ноября, 2015 - 12:06:26 - перейти к сообщению
Мелкий пишет:
Ох до чего же все эти гипотезы далеки от действительности.
Небось, ещё предполагаете, что номер дома - это цифра?
Нафига? Нафига юзеру все эти мегабайты информации?
Обычно дают выбрать страну. Затем аяксом подтягивают регионы. А лучше автокомплитом. Но не выгружают весь массив юзеру.
nordghost пишет:
в каждом городе район, в каждом районе улица, и в каждой улице дом, а в каждом доме - квартира
Ох до чего же все эти гипотезы далеки от действительности.
Небось, ещё предполагаете, что номер дома - это цифра?
nordghost пишет:
все их показать пользователю
Нафига? Нафига юзеру все эти мегабайты информации?
Обычно дают выбрать страну. Затем аяксом подтягивают регионы. А лучше автокомплитом. Но не выгружают весь массив юзеру.
Задача стоит не такая, в данном случае был упрощённый пример. Сама задача немного посложнее.
(Добавление)
LIME пишет:
Свести все в единую таблицу с полем "тип сущности"
Тоесть тип улица или страна или тд и тп
Реализовать в виде nested sets ...погуглить
Тогда можно будет тащить всю иерархию одним запросом
Или ветвь дерева
Второй вариант юзать кладр
Для кладр есть готовые решения
Зависит от движка
Тоже в гугл
Както так
(Добавление)
Nested sets это способ отображения иерархии в реляционной бд
Вернее одна из оптимизаций оного
Это так....для общего понимания
Тоесть тип улица или страна или тд и тп
Реализовать в виде nested sets ...погуглить
Тогда можно будет тащить всю иерархию одним запросом
Или ветвь дерева
Второй вариант юзать кладр
Для кладр есть готовые решения
Зависит от движка
Тоже в гугл
Както так
(Добавление)
Nested sets это способ отображения иерархии в реляционной бд
Вернее одна из оптимизаций оного
Это так....для общего понимания
Спасибо будем пробовать.
6. LIME - 13 Ноября, 2015 - 13:47:27 - перейти к сообщению
Только обязательно отпишись
Интересно как получилось
Интересно как получилось
7. SAD - 13 Ноября, 2015 - 14:21:24 - перейти к сообщению
Можно заюзать сервис какой - нибудь для работы с адресами. Если только для России.
https://dadata[dot]ru/ к примеру
https://dadata[dot]ru/api/suggest/
https://dadata[dot]ru/ к примеру
https://dadata[dot]ru/api/suggest/
8. LIME - 13 Ноября, 2015 - 14:49:05 - перейти к сообщению
SAD про кладр не слышал? Хотя ты нав Украине
Есть для России штука .... называется классификатор адресов и чтототамеще
Кладр
И есть решения для распространенных движков
Есть для России штука .... называется классификатор адресов и чтототамеще
Кладр
И есть решения для распространенных движков
9. SAD - 13 Ноября, 2015 - 14:54:16 - перейти к сообщению
LIME пишет:
SAD про кладр не слышал? Хотя ты нав Украине
Слышал и работал без сервисов. Боль еще та.
Тот сервис, который я скинул, с ФИАС работает, вроде как.
Есть, вроде, и другие сервиса
Плюс сервисов:
есть API
есть плагины
не нужно париться с обновлением базы
10. LIME - 13 Ноября, 2015 - 15:01:08 - перейти к сообщению
SAD ну мэйби
Кладр боль это да
Слава помидорам не работаю с этими траблами
Но сошлись на том что самому свой кладр придумывать это дискотека на граблях
Думаю тс будет достаточно
Кладр боль это да
Слава помидорам не работаю с этими траблами
Но сошлись на том что самому свой кладр придумывать это дискотека на граблях
Думаю тс будет достаточно
11. nordghost - 13 Ноября, 2015 - 18:09:18 - перейти к сообщению
LIME пишет:
Только обязательно отпишись
Интересно как получилось
Интересно как получилось
У меня не с адресами возня, у меня задача сделать простой генератор рабочего процесса с помощью визуального программирования на PHP+jQuery, Там есть условия и есть неслабая вложенность процессов и т.д.
12. SAD - 13 Ноября, 2015 - 18:11:02 - перейти к сообщению
тогда подробней опять таки распишите задачу
13. Panoptik - 13 Ноября, 2015 - 18:27:51 - перейти к сообщению
nested sets ни в коем случае, он не для этого предназначен и при записях > 1000 на вставку будет тупить очень прилично
если задача реальная и боевая, то тут нужно смотреть что и для чего надо. если показывать пользователю все-все-все что есть в бд, то нужно так же ходить по уровням как хранятся данные в таблицах. от общей к частному
если нужно найти адрес из всех возможных, я бы воспользовался каким-либо поисковым движком а-ля сфинкс. проиндексировал бы все данные чтобы оно искало из строки вида
"Страна Область Район Город Улица Дом" и для автокомплита эта штука бы выдавала то что ищут, а других сложных моментов с этим я не вижу. простая иерархия без причудов
если задача реальная и боевая, то тут нужно смотреть что и для чего надо. если показывать пользователю все-все-все что есть в бд, то нужно так же ходить по уровням как хранятся данные в таблицах. от общей к частному
если нужно найти адрес из всех возможных, я бы воспользовался каким-либо поисковым движком а-ля сфинкс. проиндексировал бы все данные чтобы оно искало из строки вида
"Страна Область Район Город Улица Дом" и для автокомплита эта штука бы выдавала то что ищут, а других сложных моментов с этим я не вижу. простая иерархия без причудов