Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MYSQL:是否根据除0和null以外的所有值分组?_Php_Mysql - Fatal编程技术网

Php MYSQL:是否根据除0和null以外的所有值分组?

Php MYSQL:是否根据除0和null以外的所有值分组?,php,mysql,Php,Mysql,我有一个简单的SQL查询: SELECT tid, COUNT(*) AS bpn FROM mark_list WHERE userid = $userid GROUP BY tid 现在,列tid基本上是一个与每个条目关联的类别列表。类别是唯一的数值 我想做的是根据userid,获得有多少条记录的总体计数,但我只想一次计算整个类别(这意味着如果类别3有10000条记录,它应该只接收1条计数) 需要注意的是,有时类别被列为null,有时类别被列为0。

我有一个简单的SQL查询:

  SELECT tid, 
         COUNT(*) AS bpn
    FROM mark_list 
   WHERE userid = $userid 
GROUP BY tid
现在,列
tid
基本上是一个与每个条目关联的类别列表。类别是唯一的数值

我想做的是根据
userid
,获得有多少条记录的总体计数,但我只想一次计算整个类别(这意味着如果类别3有10000条记录,它应该只接收1条计数)


需要注意的是,有时类别被列为null,有时类别被列为0。如果项有0或null,则它没有类别,我希望它们作为自己的单独实体计算,而不是集中到一个大类别中。

您可以更改查询,使其不考虑这些特定值(通过WHERE子句),然后可能运行只考虑这些值的单独查询

也许有一种方法可以将它合并到一个查询中,但这种方法也应该有效。

Wheee

SELECT SUM(`tid` IS NULL) AS `total_null`,
       SUM(`tid` = 0) AS `total_zero`, 
       COUNT(DISTINCT `tid`) AS `other`
  FROM `mark_list`
 WHERE `user_id` = $userid

编辑:请注意,如果total_zero大于0,则必须从“other”结果中减去一个(因为tid=0将在该列中计数)

而不是
tid,COUNT(*)
尝试类似于
COUNT(DISTINCT tid tid)
的方法。对于非MySQL保留字的列/表,不需要反勾(`),但在所有标识符周围使用它们是最佳实践!不,始终使用反勾号隐藏错误不是最佳做法。它们的存在是为了逃避你不应该使用的词语……这是一种观点,我并不坚持自己的观点。保留字列表是特定于版本的。最佳实践不是记住给定版本的保留字列表,而是在所有标识符周围使用反勾号。。如果您使用ANSI兼容性,那么它就是正确的
“标识符”
语法。天哪。