如何使用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 = 1
和 activated = 1
和 banned = 0
的行数一样简单。
我发现的大多数解决方案无论出于何种原因都不起作用,有些已经过时,有些我无法弄清楚。我使用 PHP7,但不知道除了 mysqli
和 mysql
的最旧版本之外的任何解决方案都发生了多大的变化
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行[重复]的主要内容,如果未能解决你的问题,请参考以下文章