Как вывести кол-во объектов в разделах?

danneo

Честный
Регистрация
13 Ноя 2007
Сообщения
1.527
Реакции
121
У объекта есть несколько параметров (в данный момент три) : город, тип, категория.
У каждого параметра свое кол-во объектов. В зависимости от того, какой город, тип и категорию выбрал пользователь, все это нужно учесть для подсчета кол-во объектов.
Например, если выбран город, то в списке всех типов и у всех категорий кол-во объектов меняется, т.к. вычитаются все другие города.
Если проще: у объекта есть три раздела. Каждый раздел - это отдельная таблица в БД.
Также, параметры из списков, которые не имеют объектов, будут скрываться.
Как это лучше всего сделать?
Мысль такая: сделать таблицу id, city_id, type_id, cat_id, count.
При работе с объектов, править эту таблицу, только вот пока не понял, как я ее буду править в плане лишних запросов к БД, их кол-ва.
Может есть проще вариант?
 
Последнее редактирование:
Скорее всего у вас будет форма + 3 дропдауна ( город, тип, категория)
Таблица примерно как и написали выше , id, city_id, type_id, cat_id только без count, какой в нем смысл?


При загрузке страницы будет активный только 1 дропдаун, например с city . После выбора значения в нем, делать AJAX запрос на сервак и подгружать все доступные типы для связки id + city.
После выбора типа, делать еще 1 запрос и погружать cat. Таким образом пользователь выберет все значения.

При первой загрузке будет всего 1 запрос к БД ( для получения всех city ) Если сделать кеширование то и его не будет . => существенную нагрузку (лишних запросов ) это не создаст.

ИМХО адекватных ( с точки зрения простоты реализации, и простоты алгоритма) альтернативных вариантов нет.
 
Исходя из вашего описания есть только зависимость типа и категории от города, т.е. при выборе города "лишние" типы и категории должны "исчезнуть". Зависимости категории от типа или наоборот вроде бы нет судя по вашим словам.
Для описания такой зависимости я бы сделал 2 таблицы:
1. table_city_type с полями city_id и type_id и уникальным ключом city_id + type_id (для сохранения целостности данных, чтобы не было случайного задвоения)
2. table_city_categ с полями city_id и cat_id и уникальным ключом city_id + cat_id (по той же причине, что и для table_city_type)

Чтобы получить список всех типов при выборе конкретного города вы используете такой sql-запрос:
SELECT table_type.* FROM table_type, table_city_type WHERE table_type.type_id = table_city_type.type_id AND table_city_type.city_id = <нужный city_id>
для подсчета количества:
SELECT count(*) FROMtable_type, table_city_type where table_type.type_id = table_city_type.type_id and table_city_type.city_id = <нужный city_id>

Для списка и подсчета количества категорий sql-запросы будут такие:
SELECT table_categ.* FROM table_categ, table_city_categ WHERE table_categ.cat_id = table_city_categ.cat_id AND table_city_categ.city_id = <нужный city_id>
SELECT count(*) FROM table_categ, table_city_categ WHERE table_categ.cat_id = table_city_categ.cat_id AND table_city_categ.city_id = <нужный city_id>

Если в каком-то городе нет ни одного типа или ни одной категории, то count(*) вернет 0 и значит, тип или категорию нужно скрыть.
Я считаю, что лучше разделить на отдельные таблицы зависимости типов и категорий от города, т.к. так будет эффективнее и с точки зрения занимаемого места и с точки зрения быстродействия.
 
Назад
Сверху