SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.03.2011 13:30:54

chus
Участник
Зарегистрирован: 04.03.2011
Сообщений: 2

Подсчёт потомков в дереве

Добрый день.
Есть таблица:

CREATE TABLE gb_apk.apk_shop_sections(
  id_sections INT(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(255) DEFAULT NULL,
  parent INT(11) UNSIGNED NOT NULL,
  PRIMARY KEY (id_sections)
)

Используется для хранения двух уровнего дерева поле parent содержит id_section  родителя.
Появилась задача сделать запрос выводящий список корневых каталогов + количество потомков у этого каталога.

Что то типа:
id_section, name, children_count

Ну и даже стыдно это писать:
SELECT
  *,
  COUNT(id_sections = parent)
FROM
  apk_shop_sections
WHERE
  parent = 0

Неактивен

 

#2 04.03.2011 15:05:38

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Подсчёт потомков в дереве

Ну, на самом деле, очень похоже на правду.

SELECT id_sections, (SELECT COUNT(*) FROM apk_shop_sections WHERE parent = s.id_sections)
FROM apk_shop_sections s
WHERE parent = 0;

Неактивен

 

#3 04.03.2011 16:07:09

chus
Участник
Зарегистрирован: 04.03.2011
Сообщений: 2

Re: Подсчёт потомков в дереве

Мне вот тут еще подсказали такое решение:

SELECT s1.*, count(s2.id_sections)
FROM sections s1
LEFT JOIN sections s2 ON s2.parent = s1.id_sections
WHERE s1.parent = 0
GROUP BY s1.id_sections


Но Вам огромное спасибо.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson