Помогите с запросом

Bartman

Новичок
Помогите с запросом

Есть 2 таблицы - разделов и подразделов. Изначально хотел одним запросом вывести таблицей разделы и кол-во подразделов в каждом. Я это сделал вот таким образом:

SELECT chapters.*, COUNT(subchapters.subchapterID) as Amount
FROM chapters
LEFT JOIN links ON subchapters.ChapterID = chapters.ChapterID
GROUP BY chapters.ChapterID
ORDER BY chapters.ChapterID

Mysql возвращает то, что я и хотел. Хочу вставить еще одну проверку - чтобы выводились разделы и кол-вом _доступных_ подразделов в каждом (доступный подраздел имеет subchapters.Status = 1).

Казалось бы, это решается простым добавлением нового условия, вот таким образом:

SELECT chapters.*, COUNT(subchapters.subchapterID) as Amount
FROM chapters
LEFT JOIN links ON subchapters.ChapterID = chapters.ChapterID
WHERE subchapters.Status = 1
GROUP BY chapters.ChapterID
ORDER BY chapters.ChapterID

но это не проходит... подскажите, плз, как правильно сделать?
 

Kucovsky

Новичок
Вроде бы ве верно

Что конкретно не работает и не выводится
 

lucas

Guest
SELECT chapters.*, COUNT(subchapters.subchapterID) as Amount
FROM chapters
LEFT JOIN links ON subchapters.ChapterID = chapters.ChapterID
GROUP BY chapters.ChapterID
ORDER BY chapters.ChapterID
Что-то тут нечисто.
Выбираем из chapters + links, а откуда-то вылезают subchapters. :)

Так-что, полный текст запроса в студию.
 

Bartman

Новичок
Сорри, изначально запрос написал с ошибкой, я сделал вот так:

SELECT chapters.*, COUNT(subchapters.subchapterID) as Amount
FROM chapters
LEFT JOIN subchapters ON subchapters.ChapterID = chapters.ChapterID
WHERE subchapters.Status = 1
GROUP BY chapters.ChapterID
ORDER BY chapters.ChapterID

При такой записи, phpmyadmin вернул ответ: "Ваш SQL-запрос был успешно выполнен", не показав при этом таблицы с данными. Не знаю, может быть я что то упустил из вида, но синтаксис оператора SELECT по моему я написал правильно - http://www.mysql.ru/docs/man/SELECT.html. Подскажите в чём может быть дело, пожалуйста.
 

chira

Новичок
Код:
SELECT chapters.*, COUNT(subchapters.subchapterID) as Amount 
FROM chapters 
LEFT JOIN subchapters ON subchapters.ChapterID = chapters.ChapterID
  [b]AND subchapters.Status = 1[/b]
GROUP BY chapters.ChapterID 
ORDER BY chapters.ChapterID
 

Bartman

Новичок
Автор оригинала: chira
Код:
SELECT chapters.*, COUNT(subchapters.subchapterID) as Amount 
FROM chapters 
LEFT JOIN subchapters ON subchapters.ChapterID = chapters.ChapterID
  [b]AND subchapters.Status = 1[/b]
GROUP BY chapters.ChapterID 
ORDER BY chapters.ChapterID
Хмммм.... в этом случае таблица выдается, но поле Amount отображается не корректно. А именно практически по всем записям отображаются единицы. Недоступный подраздел был только один - в первом разделе и он отображен нулём. А цифры должны быть иные на самом деле - для первого раздела - 5 доступных подразделов (+1 вместе с недоступным), 4 - во втором разделе, 11 - в третьем и т.д.
 

Bartman

Новичок
Chira, вот, например::

раздел "Глава 1"
- подраздел "тема 1" - активный
- подраздел "тема 2" - активный
- подраздел "тема 3" - активный
- подраздел "тема 4" - активный
- подраздел "тема 5" - активный
- подраздел "тема 6" - неактивный

раздел "Глава 2"
- подраздел "тема 1" - активный
- подраздел "тема 2" - активный
- подраздел "тема 3" - активный
- подраздел "тема 4" - активный

раздел "Глава 3"
- подраздел "тема 1" - активный
- подраздел "тема 2" - активный
- подраздел "тема 3" - активный
- подраздел "тема 4" - активный
- подраздел "тема 5" - активный
- подраздел "тема 6" - активный
- подраздел "тема 7" - активный
- подраздел "тема 8" - активный
- подраздел "тема 9" - активный
- подраздел "тема 10" - активный
- подраздел "тема 11" - активный

что должно быть показано в случае успешной отработки запроса:

ChapterName - Amount
Глава 1 - 5
Глава 2 - 4
Глава 3 - 11

у меня отображается:

ChapterName - Amount
Глава 1 - 0
Глава 2 - 1
Глава 3 - 1
 

chira

Новичок
не компосируй мозги!
запрос работает, проверяй свои ошибки и данные ...
Код:
mysql> create table chapters (chapterid int primary key auto_increment, name varchar(20));
Query OK, 0 rows affected (0.08 sec)

mysql> create table subchapters (id int primary key auto_increment, name varchar(20), chapterID int, status tinyint);
Query OK, 0 rows affected (0.08 sec)

mysql> insert into chapters values (null,'Glava 1'),(null,'Glava 2'),(null,'Glava 3');
Query OK, 3 rows affected (0.09 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> insert into subchapters values (null,'Tema 1',1,1),(null,'Tema 2',1,1),(null,'Tema 3',1,1),(null,'Tema 4',1,1),(n
ull,'Tema 5',1,1),(null,'Tema 6',1,0);
Query OK, 6 rows affected (0.03 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> insert into subchapters values (null,'Tema 1',2,1),(null,'Tema 2',2,1),(null,'Tema 3',2,1),(null,'Tema 4',2,1);
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> insert into subchapters values (null,'Tema 1',3,1),(null,'Tema 2',3,1),(null,'Tema 3',3,1),(null,'Tema 4',3,1),(n
ull,'Tema 5',3,1),(null,'Tema 6',3,1),(null,'Tema 7',3,1),(null,'Tema 8',3,1),(null,'Tema 9',3,1),(null,'Tema 10',3,1);
Query OK, 10 rows affected (0.00 sec)
Records: 10  Duplicates: 0  Warnings: 0

mysql> SELECT chapters.*, COUNT(subchapters.ID) as Amount
    -> FROM chapters
    -> LEFT JOIN subchapters ON subchapters.ChapterID = chapters.ChapterID
    ->   AND subchapters.Status = 1
    -> GROUP BY chapters.ChapterID
    -> ORDER BY chapters.ChapterID;
+-----------+---------+--------+
| chapterid | name    | Amount |
+-----------+---------+--------+
|         1 | Glava 1 |      5 |
|         2 | Glava 2 |      4 |
|         3 | Glava 3 |     10 |
+-----------+---------+--------+
3 rows in set (0.05 sec)

mysql>
 

Bartman

Новичок
Хочу еще попросить помочь.....
Месяц назад после помощи <b>Chira</b> запрос выглядит так:

SELECT chapters.*, COUNT(subchapters.ID) as Amount
FROM chapters
LEFT JOIN subchapters ON subchapters.ChapterID = chapters.ChapterID
AND subchapters.Status = 1
GROUP BY chapters.ChapterID
ORDER BY chapters.ChapterID

Этот запрос выводит разделы и кол-во подразделов в каждом разделе, причём выводятся не просто подразделы, а только доступные подразделы (доступный подраздел имеет subchapters.Status = 1).

Как нужно модифицировать запрос, чтобы выводилось кроме этого также разделы с недоступными подразделами (у них, соот-но subchapters.Status = 0)?

То есть, вот, например:

раздел "Глава 1"
- подраздел "тема 1" - активный
- подраздел "тема 2" - активный
- подраздел "тема 3" - неактивный
- подраздел "тема 4" - активный
- подраздел "тема 5" - активный
- подраздел "тема 6" - неактивный
- подраздел "тема 7" - активный

в случае успешной отработки запроса должно получиться:

ChapterName - Amount_Active - AmountDeactive
Глава 1 - 5 - 2

Я понимаю, что это можно сделать двумя запросами, но можно ли сделать одним?

-~{}~ 26.07.04 11:49:

Может ли кто подсказать?
 

botan

Новичок
SELECT sum(STATUS ) , count( * ) - sum(STATUS ) FROM `subchapters` WHERE 1 GROUP BY `chapterID`
Далее сам %)
 
Сверху