MySQL. Вопрос по COUNT

  • Автор темы Автор темы Krisha
  • Дата начала Дата начала

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 то получается муть.
 
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
 
[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]
?
 
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
 
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

Совсем я потерялся...
 
обязательно один запрос?
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')
 
Krisha
Что, то я тож запутался в твоем запросе.

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

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