MySQL COUNT()导致空数组()返回

时间:2011-06-23 18:13:40

标签: mysql sql join

MySQL服务器版本:服务器版本:4.1.14

MySQL客户端版本: 3.23.49

正在讨论的表: ads_list和ads_cate。

表关系:ads_cate包含许多ads_list。

键入: ads_cate.id = ads_list.Category。

我不确定这里发生了什么,但我想在一个简单的agreggate查询中使用COUNT(),我得到空白输出。

这是一个简单的例子,它会返回预期的结果:

$queryCats = "SELECT id, cateName FROM ads_cate ORDER BY cateName";

但是如果我修改它来添加COUNT()和其他查询数据我得不到数组返回w / print_r()(没有结果)?

$queryCats = "SELECT ads_cate.cateName, ads_list.COUNT(ads_cate.id), 
FROM ads_cate INNER JOIN ads_list 
ON ads_cate.id = ads_list.category 
GROUP BY cateName ORDER BY cateName";

最终,我正在尝试计算每个类别中的ad_list项目数。

我在这里尝试做的是否存在MySQL版本冲突?

注意:我花了一些时间逐项分解,COUNT()似乎导致array()消失。并且JOIN似乎做了同样的事情......我无法帮助我在没有访问php或mysql错误设置的Yahoo服务器上开发它。

5 个答案:

答案 0 :(得分:2)

我认为您的COUNT语法错误。它应该是:

COUNT(ads_cate.id)

COUNT(ads_list.id)

取决于你在计算什么。

答案 1 :(得分:2)

Count是一个聚合。意味着永远返回结果集至少一个

这里你试试count ads_list.id不是null但是那个错了。怎么说Myke Count(ads_cate.id)或Count(ads_list.id)是更好的方法

你有内部加入ads_cate.id = ads_list.category所以不需要Count(ads_cate.id)或COUNT(ads_list.id)只计算(*)

现在如果你不想要null添加

仅匹配

SELECT ads_cate.cateName, COUNT(*), 
FROM ads_cate INNER JOIN ads_list 
ON ads_cate.id = ads_list.category 
GROUP BY cateName 
having not count(*) is null
ORDER BY cateName

所有

SELECT ads_cate.cateName, IFNULL(COUNT(*),0), 
FROM ads_cate LEFT JOIN ads_list 
ON ads_cate.id = ads_list.category 
GROUP BY cateName    
ORDER BY cateName

答案 2 :(得分:1)

你可能会遇到错误。检查服务器日志。

另外,看看尝试这个时会发生什么:

SELECT COUNT(*), category 
FROM ads_list 
GROUP BY category

答案 3 :(得分:1)

你有没有尝试过:

$queryCats = "SELECT ads_cate.cateName, COUNT(ads_cate.id) 
              FROM ads_cate
              JOIN ads_list ON ads_cate.id = ads_list.category
              GROUP BY ads_cate.cateName";

我猜你需要列表中的类别,在这种情况下,这里的查询应该有效。首先尝试不使用ORDER BY。

答案 4 :(得分:1)

您的数组为空或消失,因为您的查询有错误:

  1. 在FROM
  2. 之前不应该有逗号
  3. “ads_list”。 COUNT前的前缀不正确
  4. 请尝试直接在MySQL中运行该查询,您将看到错误。或者尝试使用mysql_error()回显输出。

    现在,与您的查询相关的其他一些要点:

    1. 不需要执行ORDER BY,因为GROUP BY默认在分组列
    2. 上排序
    3. 你正在计算错误的列,它总能给你1个
    4. 也许您正在尝试检索ads_cate的ads_list数量?这可能是您的查询:

      SELECT `ads_cate`.`cateName`, COUNT(`ads_list`.`category`) `cnt_ads_list`
      FROM `ads_cate`
      INNER JOIN `ads_list` ON `ads_cate`.`id` = `ads_list`.`category`
      GROUP BY `cateName`;
      

      希望有帮助吗?