I have a multiple tables for a library database and I want to count a how many publications has been lent to a certain group.
I have these tables
Patrons table
CREATE TABLE `patrons` (
`id` int(10) UNSIGNED NOT NULL,
`category_id` int(10) UNSIGNED NOT NULL,
`firstname` varchar(255) NOT NULL,
`lastname` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Patron Categories
CREATE TABLE `patron_categories` (
`id` int(10) UNSIGNED NOT NULL,
`name` varchar(255) NOT NULL,
`overdue` float NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Publications
CREATE TABLE `publication` (
`id` int(10) UNSIGNED NOT NULL,
`name` varchar(255) NOT NULL,
`year` year(4) NOT NULL,
`ISBN` varchar(255) NOT NULL,
`type` varchar(24) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Checkout
CREATE TABLE `checkouts` (
`id` int(10) UNSIGNED NOT NULL,
`publication_id` int(10) UNSIGNED NOT NULL,
`patron_id` int(10) UNSIGNED NOT NULL,
`checkout` date NOT NULL,
`checkin` date NOT NULL,
`actual_checkin` date DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
This is my query to list patron categories with their total patrons and their current number of publications their checkout out.
SELECT pc.NAME AS Category,
Count(p.id) AS patrons,
Count(c.id) AS publications
FROM patron_categories AS pc
JOIN patrons AS p
ON pc.id = p.category_id
LEFT JOIN checkouts AS c
ON c.actual_checkin = NULL
LEFT JOIN publication AS pub
ON c.publication_id = pub.id
GROUP BY Category
ORDER BY Category
I don't know what's wrong but it gives the number of publications as 0 while there are many publications lent to those patrons. Any help please. The full database with dummy data is located here.
Aucun commentaire:
Enregistrer un commentaire