Сделайте RIGHT JOIN
вместо этого. Попробуйте это:
SELECT type.id, type.name, COUNT(page.type) AS tot
FROM page
RIGHT JOIN type ON page.type=type.id
GROUP BY type.id
Обратите внимание на другой способ подсчета. page.type будет NULL
для типов, которые не имеют
страницы. Такие строки будут игнорироваться при выполнении COUNT
[РЕДАКТИРОВАТЬ] Вот пример. Если у нас есть следующие данные:
type
id name
1 A
2 B
3 C
page
id type
1 1
2 1
3 2
Если мы сделаем JOIN
как в моем ответе (без GROUP BY
или COUNT
), наш набор результатов будет выглядеть так:
type.id type.name page.id page.type
1 A 1 1
1 A 2 1
2 B 3 2
3 C NULL NULL
Теперь, когда мы делаем GROUP BY
и COUNT(type.id)
, мы считаем строки
где type.id не равен NULL. Это будет все строки: результат 2 для A
и 1 для B и C.
Если вместо этого мы сделаем COUNT(page.type)
, мы получим 2 для A, 1 для B и 0 для C (потому что
page.type
было NULL
для C!)