У меня проблема с GROUP BY

Vova

Guest
SQL-профи - это вам!

Есть таблица:
tbl (
g_id mediumint(8) NOT NULL auto_increment, // id, например, какой-нибудь группы
s_id mediumint(8) NOT NULL default '0', // id групы, но уже родительской
title varchar(255) NOT NULL default '',
)

Примерные записи:
(1,0,'Title_1')
(2,0,'Title_2')
(3,1,'SubTitle_1')
(4,1,'SubTitle_2')
(5,2,'SubTitle_1')
(6,2,'SubTitle_2')

Нужен такой результат:
id___title______total (<---- в этом вся проблема!)
1___'Title_1'___'кол-во подгрупп в группе Title_1'
2___'Title_2'___'кол-во подгрупп в группе Title_2'

Пытаюсь чё-то мудрить, но ничего не получается, выводит ошибку, что надо делать с GROUP BY. в документации тоже ничё не понятно.

Профессионалы помогите!!!

-~{}~ 26.05.05 15:39:

Народ, если вопрос слишком тупой, то хотя бы дайте какие-нибудь ссылки, где популярно написано 'GROUP BY - это...'.
 

regi

Новичок
нужна рекурсивная функция
может здесь есть что-то нужное:
http://detail.phpclub.ru/article/2002-06-03
я использую db_tree:
http://detail.phpclub.ru/article/db_tree
 

divxak

Guest
Попробууй так

select s_id,count(g_id),title from tbl group by s_id;
 

Vova

Guest
А если сделать именно таким способом. зачем всё усложнять?. Это вообще возможно?
 

Vova

Guest
divxak
все равно не работает

-~{}~ 26.05.05 16:53:

regi
Дело не в том, как сделать это дерево, а в том как подсчитать количество подгрупп.
 

regi

Новичок
в два запроса наверное :)
может что нить такое:

$result = mysql_query("SELECT id, pid, title FROM t");
while($row = mysql_fetch_array($result)){
$r2 = mysql_query("SELECT COUNT(pid) as cc FROM t WHERE pid='".$row['id']."' ");
$count_row = mysql_fetch_array($r2);
};
 

Vova

Guest
regi
вот надо точно также.... только одним запросом :)
 

Red Hat

Guest
SELECT t1.`g_id` , t1.`title`, count(1)
FROM `tbl` t1 LEFT JOIN `tbl` t2 ON t2.`s_id` = t1.`g_id`
WHERE t1.`s_id` = 0 GROUP BY t1.`g_id` LIMIT 3;

я про вложенность = 3 правильно понял?
 

Vova

Guest
Red Hat
опять нето.

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

и чтобы все это выводилось одним запросом. это вообще возможно?
 

Red Hat

Guest
SELECT t1.`g_id` , t1.`title`, count(1)
FROM `tbl` t1 LEFT JOIN `tbl` t2 ON t2.`s_id` = t1.`g_id`
WHERE t1.`s_id` = 0 GROUP BY t1.`g_id` LIMIT 3;
Как раз таки то
Выведет 100%:

id title count(1)
1 Title_1 Кол-во подгрупп в группе Title_1
2 Title_2 Кол-во подгрупп в группе Title_2
 

Vova

Guest
Red Hat
приношу свои извинения. я когда первый раз пробовал, у меня в шаблоне была ошибка, поэтому ничё небыло видно.

вот только limit не нужен.

спасибо за помощь. :)
 
Сверху