使用JOIN
.
例子
SELECT * FROM category LEFT JOIN
category_details ON category_details.cat_id = category.cat_id;
上面的查询将返回所有category
和关联的category detail
.
OP评论回复
SELECT c.name,
IFNULL(sub_c.total, 0) num
FROM category c
LEFT JOIN ( SELECT COUNT(*) total, cat_id
FROM category_details
GROUP BY cat_id
) sub_c ON (sub_c.cat_id = c.cat_id);
完整代码
<?php
$query = "SELECT c.name,
IFNULL(sub_c.total, 0) num
FROM products_category c
LEFT JOIN ( SELECT COUNT(*) total, cat_id
FROM product
GROUP BY cat_id
) sub_c ON (sub_c.cat_id = c.id)";
$result = mysql_query($query)or die(mysql_error());
echo "<table><tr><td>NameCount</td></tr>";
while($row = mysql_fetch_assoc($result))
{
echo "<tr><td>".$row['name']."(".$row['num'].")"."</td></tr>";
}
echo "</table>";
?>
MySQL 表
产品类别表
CREATE TABLE IF NOT EXISTS `products_category` (
`id` int(11) NOT NULL,
`name` varchar(200) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Dumping data for table `products_category`
--
INSERT INTO `products_category` (`id`, `name`) VALUES
(1, 'Erasmus'),
(2, 'Preston'),
(3, 'Ulric'),
(4, 'Gray'),
(5, 'Joseph'),
(6, 'Merrill'),
(7, 'Alan'),
(8, 'Jeremy'),
(9, 'Solomon'),
(10, 'Andrew'),
(11, 'Galvin'),
(12, 'Craig'),
(13, 'Cameron'),
(14, 'Omar'),
(15, 'Addison');
产品表
CREATE TABLE IF NOT EXISTS `product` (
`id` int(11) NOT NULL,
`name` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
`cat_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
--
-- Dumping data for table `product`
--
INSERT INTO `product` (`id`, `name`, `cat_id`) VALUES
(1, 'Wesley', 1),
(2, 'Graiden', 2),
(3, 'Cruz', 5),
(4, 'Hayden', 5),
(5, 'Kennedy', 6),
(6, 'Uriah', 8),
(7, 'Alan', 8),
(8, 'Cade', 1),
(9, 'Ryan', 5),
(10, 'Brody', 7);
以上将输出
Erasmus(2)
Preston(1)
Ulric(0)
Gray(0)
Joseph(3)
Merrill(1)
Alan(1)
Jeremy(2)
Solomon(0)
Andrew(0)
Galvin(0)
Craig(0)
Cameron(0)
Omar(0)
Addison(0)