gpt4 book ai didi

php - 左连接只返回一行

转载 作者:行者123 更新时间:2023-12-01 02:11:09 25 4
gpt4 key购买 nike

我正在尝试连接两个表。我想要 product_category 表中的所有列(现在共有 6 个)并计算 products_has_product_category 中每个类别中的产品数量 CatCount table 。我的查询结果是包含第一个类别的 1 行,总计数为 68,而我正在寻找包含每个类别计数的 6 行。

<?php
$result = mysql_query("
SELECT a.*, COUNT(b.category_id) AS CatCount
FROM `product_category` a
LEFT JOIN `products_has_product_category` b
ON a.product_category_id = b.category_id
");
while($row = mysql_fetch_array($result)) {

echo '
<li class="ui-shadow" data-count-theme="d">
<a href="' . $row['product_category_ref_page'] . '.php" data-icon="arrow-r" data-iconpos="right">' . $row['product_category_name'] . '</a><span class="ui-li-count">' . $row['CatCount'] . '</span></li>';
}

?>

我已经为此工作了几个小时,非常感谢对我做错的任何帮助。

最佳答案

在没有 GROUP BY 子句的情况下,COUNT() 聚合只能返回一行,保存由 过滤后的表的总计数WHERE 子句。我怀疑您的意思是在针对子查询的 LEFT JOINGROUP BY b.category_id:

SELECT
a.*,
catcount
FROM
product_category a
LEFT JOIN (
SELECT category_id, COUNT(*) AS catcount
FROM products_as_product_category
GROUP BY category_id
) subcount ON a.product_category_id = subcount.category_id

这是因为 MySQL 对 GROUP BY 子句的内容和存在很宽容,所以您的查询首先在语法上是成功的。由于缺少 GROUP BY,它在大多数其他 RDBMS 中都会失败。根据表 product_category 的内容,MySQL 可能允许您在没有连接子查询的情况下执行上述操作,而是在 GROUP 中包含来自 product_category 的正确列BY 子句,但不知道该表的内容我不能肯定地说,并且上述方法是标准的并且可以跨其他 RDBMS 移植,而不依赖于 MySQL 的宽容度。

最后一点,虽然我已经在上面做了,但我从不建议在 JOIN 查询中执行 SELECT *。连接表之间的公共(public)列名称需要别名以在 PHP API 中进行区分,从而引起混淆。始终最好在 SELECT 列表中明确说明您实际需要的列。

关于php - 左连接只返回一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12924299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com