J'ai deux tables MySQL: une pour les articles et une autre pour enregistrer les achats. J'essaye de lister simplement chaque produit dans la table d'articles avec le nombre de fois qu'un utilisateur spécifique a acheté cet article. S'ils l'ont acheté 0 fois je voudrais qu'il liste encore l'article, mais dites 0. Ma requête actuelle semble exclure les enregistrements avec 0 achats.MySQL Count Query excluant les enregistrements lors de la jointure
Voilà ma requête en cours .. J'ai essayé GROUP BY i.item_id ainsi:
SELECT i.item_id, i.item_name, i.item_sku, i.item_price, COUNT(p.item_id) as purchase_count
FROM items i
LEFT OUTER JOIN purchases p
ON p.item_id = i.item_id
WHERE p.user_id = '1'
GROUP BY p.item_id
ORDER BY i.item_name ASC
est ici la création de la table SQL:
CREATE TABLE `items` (
`item_id` int(11) NOT NULL AUTO_INCREMENT,
`item_name` varchar(100) NOT NULL,
`item_sku` varchar(100) NOT NULL,
`item_price` decimal(19,4) NOT NULL,
PRIMARY KEY (`item_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=5 ;
INSERT INTO `items` VALUES(1, 'Item One', 'ITEM1', 99.9900);
INSERT INTO `items` VALUES(2, 'Item Two', 'ITEM2', 19.9900);
INSERT INTO `items` VALUES(3, 'Item Three', 'ITEM3', 10.9900);
INSERT INTO `items` VALUES(4, 'Item Four', 'ITEM4', 4.9900);
CREATE TABLE `purchases` (
`purchase_id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`item_id` int(11) NOT NULL,
`purchase_date` datetime NOT NULL,
PRIMARY KEY (`purchase_id`),
KEY `user_id` (`user_id`,`item_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ;
INSERT INTO `purchases` VALUES(1, 1, 1, '2011-02-01 12:01:38');
INSERT INTO `purchases` VALUES(2, 1, 2, '2011-01-03 12:01:45');
INSERT INTO `purchases` VALUES(3, 1, 1, '2011-02-08 12:02:17');
Merci pour toute aide! Je pensais que comme une jointure externe gauche, il afficherait tous les éléments.
+1 pour ne pas utiliser JOIN, belle solution –
Hey merci pour la répondre! Je vous en suis reconnaissant. Cela a du sens et fonctionne comme je le veux. Merci encore. – SqlSoul