|
|
|
| Есть таблица. Разделы и подразделы сайта.
id path alias name
1 1 index.html Главная
2 2 faq.html FAQ
3 3 articlies.html Статьи
4 3_1 safety.html Безопасность
5 3_2 programming.html Программирование
6 1_1 subpart.html Подраздел
7 3_2_1 asm.html Assembler
В админке хочу сделать так. Например, когда выводится список разделов, выводится и кол-во подразделов раздела. То есть, согласно выше приведенным данным должно быть (выводится список разделов первого уровня)
Название Кол-во подразделов
Главная 1
FAQ 0
Статьи 2
Ниже привожу sql-запрос, который у меня получился:
SELECT *, (SELECT COUNT(*) FROM `tbl_parts` WHERE `path` REGEXP CONCAT('^', `path`, '_[0-9]*$')) AS `countParts`
FROM `tbl_parts` WHERE (`path` REGEXP '^[0-9]*$') ORDER BY `name` asc
Но подразделы он не считает, в чем моя ошибка, подскажите пожалуйста | |
|
|
|
|
|
|
|
для: levsha
(01.12.2009 в 17:07)
| | идеи есть? | |
|
|
|
|
|
|
|
для: levsha
(02.12.2009 в 17:02)
| | Идеи - уйти от крайне неудобного представления деревьев в виде matherialized paths в сторону nested sets. | |
|
|
|
|
|
|
|
для: levsha
(01.12.2009 в 17:07)
| | может, что в этом смысле... (на сонную голову)
SELECT
a.*,
COUNT(b.`id`) AS `countParts`
FROM
`tbl_parts` a
LEFT JOIN
`tbl_parts` b
ON
b.`path` REGEXP CONCAT('^', a.`path`, '_[0-9]*$')
WHERE
(a.`path` REGEXP '^[0-9]*$')
GROUP BY
a.`id`
ORDER BY
a.`name`
|
регулярки не трогал... не помню) | |
|
|
|
|
|
|
|
для: а-я
(02.12.2009 в 17:23)
| | спасибо, работает | |
|
|
|