【问题标题】:Count(id) mysql - show 0 if no results?Count(id) mysql - 如果没有结果则显示 0?
【发布时间】:2015-12-15 14:15:19
【问题描述】:

如果用户有新的聊天消息,我想计数(id)。

我的问题是如果没有消息它不会给我 0 结果。 怎么了?

$stmt = $mysqli->prepare("SELECT count(id) FROM chat WHERE `to`=? and recd='0' group by `from`");
$stmt->bind_param('s', $user);
$stmt->execute();
$stmt->bind_result($chatcont);
$stmt->fetch();
$stmt->close();

php:

echo "($chatcont)";

如果我没有消息:

()

我想在里面显示 0。

【问题讨论】:

  • 我相信由于GROUP BY 命令,计数中的NULL 输出而不是0。当输出中有0 rows 时,GROUP BY 命令不能对任何内容进行 GROUP,从而产生 NULL 结构。
  • 哦,你是对的! group by 是这里的问题...我应该改用 num 行吗?因为我需要按发件人计算消息,而不是按消息的实际数量...

标签: php mysql


【解决方案1】:

使用$stmt->num_rows 返回结果中的行数。 如果是 0 则 echo 0 否则 echo $chatcont

【讨论】:

  • 谢谢!正如 Anshuman Chatterjee 所说,计数问题是 group by!我认为解决方案确实是 num_rows ......谢谢
【解决方案2】:

这是一个问题,如果被错误地提出,会使人们到处写错误的答案。

正确使用 SQL,count()总是返回一个数字。

这是错误的 SQL。虽然接受的答案本质上是错误的,并且永远不应该使用,因为它has been answered here thousands times already,都是徒劳的。

SELECT count(id) FROM chat WHERE `to`=? and recd='0'

是获得未读消息数量的正确答案。

要获得发件人的数量是另一个问题。这也可以用 SQL 来回答。如果有人问过

SELECT count(distinct `from`) FROM chat WHERE `to`=? and recd='0'

【讨论】:

  • @RickJoe 这个对我来说似乎是唯一正确的答案。为什么需要使用 group by?
【解决方案3】:

但您不需要在 PDO 语句中使用 bind_result。请避免不必要的动作。 只需获取您的数据并在任何地方使用即可。

$stmt = $mysqli->prepare("SELECT count(id) as count FROM chat WHERE `to`=? and recd='0' group by `from`");
$stmt->execute(array($user));
$chatcont = $stmt->fetch();

echo $chatcont['count'];

在这里,您将得到 count 或 0

【讨论】:

  • 周围没有 PDO
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多