我有兩個MySQL表:一個用於物品,另一個用於記錄購買。我試圖簡單列出商品表中的每件商品以及特定用戶購買該商品的次數。如果他們購買了0次,我希望它仍然列出該項目,但是說出0.我目前的查詢似乎排除了0次購買的記錄。MySQL Count Query加入時不包含記錄
這裏是我當前的查詢。我已經試過GROUP BY i.item_id還有:
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
下面是創建表的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');
感謝您的幫助!我認爲,作爲一個左外連接,它會顯示所有項目。
+1不使用加入,很好的解決方案 – 2011-02-11 18:43:06