MySQL: получить записи из базы данных и добавить столбец COUNT () в строки - PullRequest
0 голосов
/ 07 декабря 2009

Я пытаюсь получить книги из одной таблицы и оставил присоединиться к таблице глав. Что мне нужно из второй таблицы, так это просто COUNT () глав, доступных для этих книг, и добавить это значение в качестве дополнительного столбца под названием главы (или что-то еще).

Моя текущая попытка выглядит следующим образом: ВЫБЕРИТЕ b. *, Считайте (c.chapter_nr) как главы ОТ books как b левые главы соединения как c на c.book_id = b.id

Он получает только одну из таблицы книг и добавляет результат count () к этой строке, но я бы хотел получить ВСЕ строки из таблицы книг, следовательно, LEFT JOIN

Ответы [ 4 ]

3 голосов
/ 07 декабря 2009

Вам не хватает предложения GROUP BY:

SELECT b.*, count(c.chapter_nr) as chapters 
FROM books AS b 
LEFT JOIN chapters AS c ON c.book_id = b.id 
GROUP BY b.id
3 голосов
/ 07 декабря 2009
SELECT b.*, count(c.chapter_nr) as chapters 
FROM books as b 
LEFT JOIN chapters as c on (c.book_id = b.id)
GROUP BY b.id

ПОЯСНЕНИЯ

Вам нужно сгруппировать по книге, чтобы определить фактическое количество глав. Если бы вы пропустили предложение GROUP BY, вы бы получили набор результатов всех глав каждой книги. Вы просто хотите ограничить результаты уникальными книгами и соответствующим количеством глав.

1 голос
/ 07 декабря 2009

Попробуйте:

SELECT b.*,  
(select count(*) from chapters c where c.book_id = b.id) as chapters   
FROM books b

Возвращает 0, если для книги нет глав.

0 голосов
/ 07 декабря 2009

Не проверено, но вам нужно предложение "group by", чтобы сделать то, что вы хотите:

Select b.*, count(*) as chapters
from books b left outer join chapters c
on c.book_id = b.id
group by b.*
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...