如何使用mysqli计算来自同一数据库的2行[重复]

Posted

技术标签:

【中文标题】如何使用mysqli计算来自同一数据库的2行[重复]【英文标题】:How to use mysqli to count 2 rows from same database [duplicate] 【发布时间】:2016-10-21 21:27:52 【问题描述】:

我有一个图表,我想在其中显示被禁止和激活的用户数量。我想做到这一点就像使用 php 计算 banned = 1activated = 1banned = 0 的行数一样简单。

我发现的大多数解决方案无论出于何种原因都不起作用,有些已经过时,有些我无法弄清楚。我使用 PHP7,但不知道除了 mysqlimysql 的最旧版本之外的任何解决方案都发生了多大的变化

1.

 $result = $db->query("SELECT COUNT(*) AS banned FROM users WHERE banned = '1'");
    $row = $result->fetch_assoc();
    echo $row['banned']." banned users.";

    $result->close();

2.

 $num_banned = $db->query("SELECT COUNT(*) FROM `users` WHERE `banned` = `1`");
    $row = $num_banned->fetch_row();
    echo '#: ', $row[0];

    $num_banned = mysqli_query($db, "SELECT * FROM users WHERE banned='1'"); $num_rows = mysqli_num_rows($num_banned);

【问题讨论】:

也许你给我们看一些代码?还是您希望我们为您编写? @u_mulder 我们说的是 3 行代码,我无法真正展示任何示例,因为我不确定我尝试过的内容是否过时 但是你连这三行都不能显示,lol mysqli 在 php 7 中工作... 显示你有什么和你尝试过的失败。 【参考方案1】:

您应该可以使用cases 来计算您的记录。

select 
count(case when (banned = 1 and activated = 1) then 1 end) as activeban,
count(case when (banned = 0 and activated = 1) then 1 end) as activenoban,
count(case when (banned = 1) then 1 end) as banned
from users;

演示:http://sqlfiddle.com/#!9/450d04/13

运行你应该有的查询,被禁止的激活用户计数为activeban,被禁止的非激活用户计数为activenoban,以及所有被禁止用户的计数banned

【讨论】:

为什么是(select 1) 而不仅仅是1 在尝试之后(至少我是如何理解的)。我收到一个错误mysqli_query() expects parameter 1 to be mysqli, object given in @Barmar 我之前运行 SQLFiddle 时遇到错误,但现在可以正常工作了。 @martinj 你的 PHP 是什么?示例 1、2 或 3(请注意在 3 中您已切换到程序)。 @chris85 这些是我用过的例子。我想做的就是计算x = 1 的行,我没有它的php 代码。我在使数字 3 成为完整的“代码”ctrl + k 因某种原因停止工作时遇到了一些问题

以上是关于如何使用mysqli计算来自同一数据库的2行[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在同一张表上计算不同结果的计数[重复]

使用计算字段连接同一个表会返回“重复”行 [关闭]

Mysqli查询功能插入重复行

MySQL:mysqli_fetch_array() [重复]

PHP,AJAX,MYSQLI,不插入行[重复]

如何根据计算值字段选择行[重复]