MySQL SELECT计数多对多

时间:2016-10-27 14:25:06

标签: mysql sql count many-to-many

我有3张桌子(多对多关系)

  • 产品(带“id”主键)
  • 标签(带有“id”主键)
  • product_tags(使用product_id和tags_id作为主键)

我只想创建一个SELECT COUNT查询,这样我就可以得到每个产品的标签数量。即使产品还没有相关的标签。

我已经使用了查询,但如果没有标记,则不会显示该产品。

你有解决方案吗?

编辑(我的实际查询)

SELECT p.name, COUNT(pt.tags_id) as totalP
FROM tags t JOIN product p
LEFT JOIN product_tags pt 
  ON t.id = pt.tags_id 
     AND p.id = pt.product_id

编辑II

DROP TABLE IF EXISTS `fonction`;
DROP TABLE IF EXISTS `product`;
DROP TABLE IF EXISTS `fonction_product`;


CREATE TABLE `fonction` (
  `id` tinyint(6) UNSIGNED NOT NULL,
  `name` varchar(30) NOT NULL,
  `reference` varchar(50) NOT NULL
) ;

CREATE TABLE `product` (
  `id` tinyint(6) UNSIGNED NOT NULL,
  `ref` varchar(30) NOT NULL,
  `name` varchar(40) NOT NULL,
  `description` varchar(70) NOT NULL,
  `col` varchar(20) NOT NULL,
  `image` varchar(50) NOT NULL,
  `point` tinyint(4) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `fonction_product` (
  `fonction_id` tinyint(6) UNSIGNED NOT NULL,
  `product_id` tinyint(6) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


ALTER TABLE `fonction`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `product`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `fonction_product`
  ADD PRIMARY KEY (`fonction_id`,`product_id`),
  ADD KEY `product_id` (`product_id`);



INSERT INTO `fonction` (`id`, `name`, `reference`) VALUES (1, 'Contrôleur des accès', 'VLA56'), (2, 'Chauffeur', 'CMA6');


INSERT INTO `fonction_product` (`fonction_id`, `product_id`) VALUES (1, 1);


INSERT INTO `product` (`id`, `ref`, `name`, `description`, `col`, `image`, `point`) VALUES (1, '62475425', 'Pantalon 2 pinces pour Homme', 'Pantalon taille basse à revers pour homme', 'Rouge', '62475425.jpg', 50);

1 个答案:

答案 0 :(得分:0)

SELECT p.name, count(pt.tags_id) as total_tags
FROM product p
LEFT JOIN product_tags pt 
  ON p.id = pt.product_id
GROUP BY p.name