在MySQL中使用COUNT时如何返回0而不是null
我使用此查询返回存储在$sTable中的歌曲列表,以及存储在$sTable2中的歌曲项目总数在MySQL中使用COUNT时如何返回0而不是null,mysql,json,null,count,Mysql,Json,Null,Count,我使用此查询返回存储在$sTable中的歌曲列表,以及存储在$sTable2中的歌曲项目总数 /* * SQL queries * Get data to display */ $sQuery = " SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))." FROM $sTable b LEFT JOIN (
/*
* SQL queries
* Get data to display
*/
$sQuery = "
SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
FROM $sTable b
LEFT JOIN (
SELECT COUNT(*) AS projects_count, a.songs_id
FROM $sTable2 a
GROUP BY a.songs_id
) bb ON bb.songs_id = b.songsID
$sWhere
$sOrder
$sLimit
";
$rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
“projects_count”和“$sTable”中的列一起放入一个数组中,然后通过JSON输出,并显示在第页的表中
当一首歌没有链接到它的项目时,这是完美的工作。它当然返回NULL
我只想将任何空值作为“0”返回
我尝试了COUNT()、COUNT(IFNULL(project_id,0)和使用COUNT(DISTINCT)
而且:-
SELECT COALESCE(COUNT(*),0) AS projects_count, a.songs_id
一切都没有成功
有什么想法吗?使用COALESCE()
函数。COALESCE()
至少接受2个参数,按顺序计算,并返回第一个非空参数。因此COALESCE(null,0)
将返回0
,而COALESCE(null,null,null,1)
将返回1
在重新阅读查询时,应该能够获得如下所示的结果:
SELECT <all the fields you want>, b.songsID, COUNT(*) AS projects_count
FROM $sTable b
LEFT OUTER JOIN $sTable2 bb ON bb.songs_id = b.songsID
$sWhere
GROUP BY b.songsID
$sOrder
$sLimit
SELECT,b.songsID,COUNT(*)作为项目\u COUNT
从$b开始
左外连接$sTable2 bb ON bb.songs_id=b.songsID
$sWhere
b.songsID分组
$sOrder
$sLimit
就像我说的,这应该是可行的,但它的某些方面感觉不太正确。
COALESCE()
返回第一个非空参数。因此,如果你说COALESCE(count(…),0)
它将返回count(…)
如果它不是空的,或者如果count(…)它将返回0
为null您不必使用子查询进行连接。如果没有合并等,以下操作应该可以正常工作:
SELECT blahblahblah, IFNULL(bb.projects_count, 0)
FROM $sTable b
etc...
SELECT ".str_replace(" , ", " ", implode(", ", $aColumns)).",
SUM(b.songsID is not null) as countprojects
FROM $sTable b
LEFT JOIN $sTable2 a ON a.songs_id=b.songsID
GROUP BY ".str_replace(" , ", " ", implode(", ", $aColumns))."
这将返回您在项目中要求的内容
它的工作方式是:左连接
只是确保您获得所有数据。
不能使用COUNT
,因为这将为空行返回1
。
但是,如果只使用布尔值TRUE的计算结果为1和
布尔值FALSE的计算结果为0,您可以对这些结果求和。只需在选择后将这一行添加到代码中即可 如果(projects\u count为空,0,projects\u count)作为projects\u countList 像这样:
$sQuery = "
SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns)).",
IF(projects_countIS NULL, 0, projects_count) As projects_countList
FROM $sTable b
LEFT JOIN (SELECT COUNT(*) AS projects_count, a.songs_id FROM $sTable2 a GROUP BY a.songs_id) bb ON bb.songs_id = b.songsID
$sWhere
$sOrder
$sLimit
";
$rResult = mysql_query( $sQuery, $gaSql['link'] ) or die(mysql_error());
在MySQL中返回0而不是null使用 如果从tblUser中选择(年龄为空,0,年龄),则选择id 与具有联接2个表的count()一起使用
像 结果是
tblA_Id Name SongCount noOfSong
-----------------------------------------------------
7 HSP NULL 0
6 MANI NULL 0
5 MEET 1 1
4 user NULL 0
3 jaani 2 2
2 ammy NULL 0
1 neha 2 2
感谢所有回答的人,但是,除了使用COALESCE之外,所有建议似乎都没有给我提供任何东西,包括使用COALESCE。不过,COALESCE对我来说是新的,我不确定在将它与COUNT(*)组合时使用什么样的语法。如果您能详细说明我的代码示例,我将非常感激,因为我的尝试似乎仍然会导致“null”。谢谢!遗憾的是,尽管我非常感谢您的努力,但它仍然没有。尽管我非常讨厌,但我可能不得不暂时使用jquery hack将null值替换为0,直到找到解决方案为止:-(虽然这看起来是一个更好的解决方案,但它不适合我,而且我对MySQL的经验不足,使我无法调整您的示例代码,使其与我的其他部分正常工作。我已更新了我的问题,以提供更多细节。非常感谢您的建议,但我认为我们肯定正在接近。您介意打印res吗我的查询结果和粘贴结果?它会在我的应用程序中为我返回一个JSON格式错误。我不确定实际查询结果会有多有用,但它们是:。str_replace(;“introde(;”$aColumns))。;“5059”如果这不是在我真诚地道歉之后你所做的,正如我所说的,我对MySQL和调试查询的方法非常陌生。如果有帮助的话,我可以粘贴整个PHP文件(没有那么长)我用来执行查询并返回JSON?为了澄清上述问题,您的查询只返回1个结果,而我原来的查询返回所有5000个条目。
tblA_Id Name SongCount noOfSong
-----------------------------------------------------
7 HSP NULL 0
6 MANI NULL 0
5 MEET 1 1
4 user NULL 0
3 jaani 2 2
2 ammy NULL 0
1 neha 2 2