Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Выборка из базы данных
 
 автор: levsha   (01.12.2009 в 17:07)   письмо автору
 
 

Есть таблица. Разделы и подразделы сайта.
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   (02.12.2009 в 17:02)   письмо автору
 
   для: levsha   (01.12.2009 в 17:07)
 

идеи есть?

  Ответить  
 
 автор: Trianon   (02.12.2009 в 19:12)   письмо автору
 
   для: levsha   (02.12.2009 в 17:02)
 

Идеи - уйти от крайне неудобного представления деревьев в виде matherialized paths в сторону nested sets.

  Ответить  
 
 автор: а-я   (02.12.2009 в 17:23)   письмо автору
 
   для: 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`


регулярки не трогал... не помню)

  Ответить  
 
 автор: levsha   (06.12.2009 в 19:16)   письмо автору
 
   для: а-я   (02.12.2009 в 17:23)
 

спасибо, работает

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования