MySQL. Вопрос по COUNT

Krisha

pain in the neck
MySQL. Вопрос по COUNT

Есть такой запрос:
PHP:
SELECT chapters.ChapterID, chapters.ChapterOrder, chapters.ChapterName,
IF((lessons.TypeID = '2' OR lessons.TypeID = '4'), LessonNumber, NULL) AS LessonNumber
FROM chapters, lessons
WHERE lessons.ChapterID = chapters.ChapterID
ORDER BY chapters.ChapterOrder, lessons.LessonNumber
Выбираем ChapterID, ChapterOrder, ChapterName из таблицы chapters и из таблицы lessons выбираем все те лессоны у которых TypeID равен 2 или 4, необходимо в результате выборки так же получить кол-во COUNT(lessons.LessonID) из таблицы lessons для каждого чаптера.

Никак не соображу, ведь без GROUP BY кол-во не получить, а если сделать GROUP BY то получается муть.
 

Demiurg

Guest
select chapters.* , count(lessons.LessonID)
from chapters left join lessons
on lessons.ChapterID = chapters.ChapterID and (lessons.TypeID = '2' OR lessons.TypeID = '4')
group by chapters.ChapterID
 

tony2001

TeaM PHPClub
[sql]
SELECT
chapters.ChapterID,
chapters.ChapterOrder,
chapters.ChapterName,
IF((lessons.TypeID = '2' OR lessons.TypeID = '4'),
LessonNumber, NULL) AS LessonNumber,
COUNT(lessons.LessonID) as lesson_count
FROM
chapters,
lessons
WHERE
lessons.ChapterID = chapters.ChapterID
GROUP BY
chapters.ChapterID,
chapters.ChapterOrder,
chapters.ChapterName,
IF((lessons.TypeID = '2' OR lessons.TypeID = '4'),
LessonNumber, NULL) AS LessonNumber
ORDER BY
chapters.ChapterOrder,
lessons.LessonNumber
[/sql]
?
 

Krisha

pain in the neck
Demiurg
Не, эт не то, низя группировать так, в том-то и дело, должно получится что-то типа:

ChapterID | ChapterOrder | ChapterName | LessonNumber | LessonsCount

где в каждой строке просто LessonsCount будет одинаковым...

tony2001
You have an error in your SQL syntax.
Check the manual that corresponds to your MySQL server version for the right syntax to use near 'AS LessonNumbers ORDER BY chapters.ChapterOrder, lessons.Lesson

у меня версия 4.0.17
 

Krisha

pain in the neck
Falc
не совсем понял ?

-~{}~ 04.03.04 19:19:

PHP:
SELECT chapters.ChapterID, chapters.ChapterOrder, chapters.ChapterName,
IF ((lessons.TypeID = '2' OR lessons.TypeID = '4'), lessons.LessonNumber, NULL) AS LessonNumbers,
COUNT(lessons.LessonID) AS LessonsAmount
FROM chapters, lessons 
WHERE lessons.ChapterID = chapters.ChapterID
GROUP BY chapters.ChapterID, lessons.LessonNumber
ORDER BY chapters.ChapterOrder, lessons.LessonNumber
При этом запросе выбает колонку LessonsAmount = 1

Совсем я потерялся...
 

chira

Новичок
обязательно один запрос?
cделай в два:
Код:
CREATE TEMPORARY TABLE lt
as SELECT l.ChapterID, count(l.LessonID) AS LessonsAmount
FROM lessons l
GROUP BY l.ChapterID;
// и запрос Demiurga
SELECT c.ChapterID, c.ChapterOrder, c.ChapterName , l.LessonNumber, lt.LessonAmount 
from chapters c
 LEFT JOIN lt ON c.ChapterID=lt.ChapterID
 LEFT JOIN lessons l
ON l.ChapterID = c.ChapterID AND (l.TypeID = '2' OR l.TypeID = '4')
 

Falc

Новичок
Krisha
Что, то я тож запутался в твоем запросе.

Если ты хочешь вытащить номера уроков, и кол-во уроков такого же типа, то только в 2 запроса.
 

Krisha

pain in the neck
chira
Спасибо большое, вот что получилось в результате, выбирает точно как было нужно:

PHP:
CREATE TEMPORARY TABLE temp AS SELECT L.ChapterID, COUNT(L.LessonID) AS LessonsAmount FROM lessons L GROUP BY L.ChapterID;

SELECT C.ChapterID, C.ChapterOrder, C.ChapterName , IF((L.TypeID = '2' OR L.TypeID = '4'),L.LessonNumber,NULL) AS LessonNumbers, temp.LessonsAmount
FROM chapters C
LEFT JOIN lessons L ON L.ChapterID = C.ChapterID
LEFT JOIN temp ON C.ChapterID = temp.ChapterID
ORDER BY C.ChapterOrder, L.LessonNumber
Один запросом это никак не сделать ?
 

chira

Новичок
я думаю, что один запрос это не самоцель.
можно это сделать и одним запросом , но работать это будет гораздо дольше.
 
Сверху