|
|
|
| Возникла проблема с выводом категорий и подсчетом строк в каждой из них.
Есть две таблицы cat и ad
Таблица cat содержит названия категорий. Вид должен быть такой: Cat1 -> Cat2 -> Cat3
Таблица ad содержит строки которые отбираются в зависимости от категории, чем глубже категория, тем меньше строк выводится, фильтр пошаговый.
Во первых возникла проблема сделать пошаговое отображение категорий
Фрукты -> Яблоки -> красные, зеленые
--------> Апельсины -> гнилые, свежие
Овощи -> помидоры -> хорошие, плохие
-------> огурцы -> Россия, Турция
|
А так же подсчет строк в отображаемых категориях, показывая даже 0
Подскажите мыслями пожалуйста. | |
|
|
|
|
|
|
|
для: gofree
(21.11.2011 в 17:42)
| | если нужно выводить все элементы определенной категории, то я думаю, что нужно в таблице cat создать пару категорий с id и потом в заметках(она же таблица ad) создать дополнительное поле cat и указывать те уникальные id таблицы cat, которым они соответсвуют. И потом делать определенный запрос к базе
/* таблица cat */
id title
1 Фрукты
2 Овощи
/* таблица ad */
id title cat
1 Помидоры 2
2 Картошка 2
3 Яблоки 1
...
|
| |
|
|
|
|
|
|
|
для: gofree
(21.11.2011 в 17:42)
| | В таких ветвистых структурах, как правило, прибегают к рекурсии, т.е. пишут функцию, которая вызывает сама себя, для того, чтобы раскрутить цепочку связанных каталогов. Точно также осуществляют и подсчет. Однако, рекурсия шутка дорогая, особенно, если на каждой итерации необходимо осуществлять запрос. Поэтому часто хитрят, либо извлекают всю структуру в память и осуществляют рекурсивные обходы по массиву, а не по таблице, либо проводят рекурсию заранее создавая таблицы вида id id_sub, где id - это идентификатор родителя, а id_sub - все подчиненные разделы (включая вложенные). Это позволяет осуществлять подсчет одним махом при помощи конструкции IN(). Однако, какой бы вы путь не выбрали, рекурсия на одном из этапов вам все-равно потребуется. | |
|
|
|