![]() |
|
Модераторы: LSD |
![]()
|
|
| Рыжий |
|
|||
![]() Помешанный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: нет Всего: 20 |
На сайте www.podelu.com реализован красивый и интересный каталог.
Хотелось бы узнать, как в нем делается выборка по городам. Скажем, если мне нужны предприятия только города Киева – он выбирает только Киев и подсчитывает, сколько ссылок в каждой категории. Как же это реализовать – в основном я видел что такие значения хранятся в базе. А если админ может сам добавлять города – сколько хочет, неужели их хранить в базе? А пересчитывать каждый каталог и все предприятия в нем на наличия предприятий из Киева – не напряжно ли? |
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: нет Всего: 261 |
Не думаю. Скорее всего там просто база грамотно построенна.
|
|||
|
||||
| Рыжий |
|
|||
![]() Помешанный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: нет Всего: 20 |
Ну даже если там в базе таков порядок:
БД Категории: id name count_all count_Lviv count_Kyiv и т.д. А данные примерно такие: 10 Оргтехника 1245 245 534 А если Админ захочет добавить все города России? |
|||
|
||||
| chief39 |
|
||||||||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 8 Всего: 77 |
Ну да
Ну, СУБД, в основном, и заточены под быструю работу с массивами данных. Держать где-то ещё - нет особого смысла.
??? А что здесь такого необычного?
Каждый раз при запросе? - нет. Не самая большая БД и выборка не суперсложная. Вполне нормально Добавлено @ 20:22 (*) - сомневаюсь, что такую таблицу сделали.. И вообще, count - на то и count, что он как "подсчёт" переводится А держать каунт, как отдельную запись - это дублирование данных, которое приводит иногда к нарушению целостности. Гораздо лучше и правильнее подсчитывать, при необходимости, с помощью аггрегатины count(). Такое дублирование аггрегированных данных приемлемо лишь для ускорения работы при огромных частых выборках. Так сказать, кэширование подсчётов. Но использовать их надо аккуратно и бережно поддерживать непротиворечивость данных. Добавлено @ 20:24 В данной БД(исходя из её возможных объёмов) - такое кэширование вряд ли пользуют. -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
||||||||
|
|||||||||
| Рыжий |
|
|||
![]() Помешанный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: нет Всего: 20 |
chief39,
Ты немного не так понял - count_all - это просто имя поля - хочешь - как угодно его называй ;) Просто могут храниться данные так: id| N a m e | ALL | Lvov | Kyev 1 | Оргтехника | 135| 75 | 60 И в том же духе... Что я имелл виду, когда говорил о проблемах с базой: Если добавить города России: id| N a m e | ALL | Moscow | Piter | Kaliningrad | и так еще 10 000 городов Так что ответ один - только считать все "на лету"? Правильно я понял |
|||
|
||||
| Рыжий |
|
||||
![]() Помешанный ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1423 Регистрация: 19.9.2004 Репутация: нет Всего: 20 |
Народ - умираю, как сделать эту выборку
если скажем 3 таблицы: 1 - categories id | name | parent | 1 | Оргтехника | 0 2 | Принтеры |1 2 - data: id | name | country | city | category | 1 | Имя | Украина| Львов | 1 2 | Имя 2 | Россия | Питер | 1 (в поле category - ID категории) 3 - Countries id | name 1 | Украина 2 | Россия Скажем человек запрашивает все данные каталога, которые размещены только в России. Что же мне? Как именно считать? Думал думал - думалку сломал Ведь для начала нужно вывести просто все каталоги, например
НУ скажем выйдет нам такой список: Строительство () Компьютерная техника () Услуги () Оргтехника () Вот в скобках должно быть число ссылок в этой категории Может как то:
и потом через mysql_num_rows? |
||||
|
|||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 14 Всего: 207 |
Примерно так, будет выдавать количество по всем категориям для всех стран... Но если надо ограничить - можно дописать в where соответствующее условие...
PS. Рекомендовано: открыть букварь по базам данных и читать описание Join и аггрегативные функции (группировки) до полного просветления. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| chief39 |
|
|||
![]() карманная тигра ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1631 Регистрация: 20.5.2005 Где: Киев Репутация: 8 Всего: 77 |
Именно так я и понял Я говорю о том, что для вряд ли для каждого города делали столбец. Потому как система совсем негибкая выйдет - при добавлении нового города необходимо трогать DDL для создания поля для этого города. Да и запросы будут сооовсем негибкие.... под каждый город. В общем, я понял именно так и соответственно изложил мысли.
Да. А для чего ещё людям мощные СУБД нужны??? Ну а по поводу запроса Vit уже написал... -------------------- Люди - это свечи. Они либо горят, либо их - в жопу!(с) |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |