左联接仅返回一行 - php

我正在尝试加入两个表。我想要product_category表中的所有列(现在总共有6个),并计算products_has_product_category表中每个类别中的产品CatCount的数量。我的查询结果是第一个类别为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子句过滤后的表总数。我怀疑您是要在GROUP BY b.category_id中针对子查询的LEFT JOIN

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子句的内容和存在,所以您的查询在语法上首先是成功的。在大多数其他RDBMS中,由于缺少GROUP BY,它将失败。根据表product_category的内容,MySQL可能允许您在没有联接的子查询的情况下执行上述操作,而是在product_category子句中包含了GROUP BY的正确列,但我不知道该表的内容不能肯定地说,上述方法是标准的,并且可以在不依赖MySQL宽容的情况下跨其他RDBMS移植。

最后一点,尽管我已经在上面做过,但我不建议在SELECT *查询中使用JOIN。联接表之间的公共列名称需要别名才能在PHP API中区分,从而引起混淆。始终最好明确显示SELECT列表中实际需要的列。

PHP strtotime困境 - php

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00�…

PHP-全局变量的性能和内存问题 - php

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

PHP Count数组元素 - php

嗨,有人可以解释为什么这会返回“数组由0个元素组成”。 :$arr = array(1,3,5); $count = count($arr); if ($count = 0) { echo "An array is empty."; } else { echo "An array has $count elements.…

php-casperjs获取内部文本 - php

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

PHP-将日期插入日期时间字段 - php

我已在数据库中使用datetime字段存储日期,使用PHP将“今天的日期”插入该字段的正确方法是什么?干杯, 参考方案 我认为您可以使用php date()函数