我有一个返回行数组的 mysql 查询。我需要从一列中获取不同值的计数。我的查询是动态的,其中 php 评估的多个条件会更改 WHERE 子句,所以我真的想尽可能在一个查询中完成所有操作,以避免重复每个动态条件。
这是我想做的一个简单版本-
如果这代表我的 sql 表的一个非常简单的版本:
Column1, Column2, Column3, Group, Active
a , b , c , 1 , YES
d , e , f, , 2 , YES
g , h , i , 1 , YES
j , k , l , 3 , NO
我想做这样的事情:
"SELECT Column1, Column2, Column3, Group,
(SELECT COUNT(DISTINCT Group) FROM 'table') AS totalGroups
FROM 'table'
WHERE Active like 'YES';"
我希望结果是我可以报告:
a) 查询中的总行数
mysql_num_rows($result) should equal = 3
b) 不同组的总数
$phparray['totalgroups'] should equal = 2
(Right now, 'totalgroups' equals = 3)
(1) 可以这样做吗?目前,'totalgroups' 返回 3 而不是 2。我可以让它使用与查询的其余部分相同的“Where”子句吗?
在我的实际代码中,这要复杂得多,当我只希望它返回 2 时,我的计数返回 1,945。:)
(2)有没有更好的方法呢?
我尝试了 php 的array_unique()
and array_count_values()
,但array_unique()
不适用于多维数组,并且无法array_count_values()
正常工作。
我查看了许多其他问题,但找不到有人在问这个特定问题的地方。我查看了 MYSQL 手动 RE 子查询,但它没有说明您是否可以共享 Where 子句。
如果您必须拥有我的实际代码才能回答这个问题(而不是上面的演示表示),请告诉我。所有 php 动态限定符都超过两页,所以为了清楚起见,我决定编写演示代码。