SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 04.04.2011 16:22:30

antoha360
Участник
Зарегистрирован: 14.03.2011
Сообщений: 6

вывести количество подкатегорий

Доброго времени суток ! Имеется таблица со списком категорий. У каждой категории могут быть подкатегории. Необходимо вывести информацию о каждой подкатегории запрашиваемой категории и количество подкатегорий у данной подкатегории. Так выглядит мой запрос:

"SELECT `oxid`,`oxparentid`,`oxsort`,`oxtitle`,`oxlongdesc`,`oxthumb`,`oxtitle_1`,
            `oxlongdesc_1`FROM $articlesTableName WHERE `oxparentid`='"
.$sCategoryId."' AND `oxactive` = 1 AND `oxhidden` = 0"

Подскажите как вывести количество подкатегорий подкатегории. Зараннее извиняюсь если путано написал.

Неактивен

 

#2 04.04.2011 16:51:19

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: вывести количество подкатегорий

Добрый день. На своём примере на всякий случай продемонстрирую, чтоб в полях не путаться.

CREATE TABLE `t4061` (`category_id` int(11) not null default '0',`name` varchar(255) DEFAULT NULL,parent_id int default NULL) ENGINE=MyISAM;

insert into `t4061` values
 (1,'Category 1',NULL)
,(2,'Category 2',NULL)
,(3,'Category 3',NULL)
,(4,'Category 4 (parent - Category 1)',1)
,(5,'Category 5 (parent - Category 2)',2)
,(6,'Category 6 (parent - Category 2)',2)
,(7,'Category 7 (parent - Category 3)',3)
,(8,'Category 8 (parent - Category 3)',3)
,(9,'Category 9 (parent - Category 3)',3)
,(10,'Category 10 (parent - Category 3)',3);


mysql> select * from `t4061`;
+-------------+-----------------------------------+-----------+
| category_id | name                              | parent_id |
+-------------+-----------------------------------+-----------+
|           1 | Category 1                        |      NULL |
|           2 | Category 2                        |      NULL |
|           3 | Category 3                        |      NULL |
|           4 | Category 4 (parent - Category 1)  |         1 |
|           5 | Category 5 (parent - Category 2)  |         2 |
|           6 | Category 6 (parent - Category 2)  |         2 |
|           7 | Category 7 (parent - Category 3)  |         3 |
|           8 | Category 8 (parent - Category 3)  |         3 |
|           9 | Category 9 (parent - Category 3)  |         3 |
|          10 | Category 10 (parent - Category 3) |         3 |
+-------------+-----------------------------------+-----------+
10 rows in set (0.00 sec)


Количество подкатегорий -
select count(category_id) from `t4061` where parent_id=НУЖНЫЙ_ID;


Количество корневых категорий -
select count(category_id) from `t4061` where isnull(parent_id);


mysql> select count(*) from `t4061` where isnull(parent_id);
+----------+
| count(*) |
+----------+
|        3 |
+----------+
1 row in set (0.00 sec)


mysql> select count(category_id) from `t4061` where parent_id=1;
+--------------------+
| count(category_id) |
+--------------------+
|                  1 |
+--------------------+
1 row in set (0.00 sec)

mysql> select count(category_id) from `t4061` where parent_id=2;
+--------------------+
| count(category_id) |
+--------------------+
|                  2 |
+--------------------+
1 row in set (0.00 sec)

mysql> select count(category_id) from `t4061` where parent_id=3;
+--------------------+
| count(category_id) |
+--------------------+
|                  4 |
+--------------------+
1 row in set (0.00 sec)


Сами подкатегории:
[syntax=mysql]select * from `t4061` where parent_id=НУЖНЫЙ_ID;[/mysql]
Корневые категории:
[syntax=mysql]select * from `t4061` where isnull(parent_id)[/mysql]


mysql> select * from `t4061` where isnull(parent_id);
+-------------+------------+-----------+
| category_id | name       | parent_id |
+-------------+------------+-----------+
|           1 | Category 1 |      NULL |
|           2 | Category 2 |      NULL |
|           3 | Category 3 |      NULL |
+-------------+------------+-----------+
3 rows in set (0.15 sec)

mysql> select * from `t4061` where parent_id=1;
+-------------+----------------------------------+-----------+
| category_id | name                             | parent_id |
+-------------+----------------------------------+-----------+
|           4 | Category 4 (parent - Category 1) |         1 |
+-------------+----------------------------------+-----------+
1 row in set (0.00 sec)

mysql> select * from `t4061` where parent_id=2;
+-------------+----------------------------------+-----------+
| category_id | name                             | parent_id |
+-------------+----------------------------------+-----------+
|           5 | Category 5 (parent - Category 2) |         2 |
|           6 | Category 6 (parent - Category 2) |         2 |
+-------------+----------------------------------+-----------+
2 rows in set (0.00 sec)


mysql> select * from `t4061` where parent_id=3;
+-------------+-----------------------------------+-----------+
| category_id | name                              | parent_id |
+-------------+-----------------------------------+-----------+
|           7 | Category 7 (parent - Category 3)  |         3 |
|           8 | Category 8 (parent - Category 3)  |         3 |
|           9 | Category 9 (parent - Category 3)  |         3 |
|          10 | Category 10 (parent - Category 3) |         3 |
+-------------+-----------------------------------+-----------+
4 rows in set (0.00 sec)

Отредактированно deadka (04.04.2011 17:04:32)


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 04.04.2011 18:47:11

antoha360
Участник
Зарегистрирован: 14.03.2011
Сообщений: 6

Re: вывести количество подкатегорий

спс, но я имел ввиду вывести количество подкатегорий подкатегории в одном запросе с информацией об подкатегории, т. к. подкатегорий может быть много, соответсвенно запросов COUNT будет много

Неактивен

 

#4 04.04.2011 21:51:07

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: вывести количество подкатегорий

Это на все категории сразу

select t.category_id, t.name, t.parent_id,(select count(*) from `t4061` t1 where t1.parent_id=t.category_id) as c from `t4061` t;


А так

select t.category_id, t.name, t.parent_id,(select count(*) from `t4061` t1 where t1.parent_id=t.category_id) as c from `t4061` t where category_id=1;


или так

select t.category_id, t.name, t.parent_id,(select count(*) from `t4061` t1 where t1.parent_id=1) as c from `t4061` t where category_id=1;


На конкретную категорию.

Может быть можно сделать оптимальнее smile


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

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