CREATE TABLE IF NOT EXISTS `tblflash` (
`FID` int(11) NOT NULL AUTO_INCREMENT,
`fname` text COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`FID`)
)
CREATE TABLE IF NOT EXISTS `tblcount` (
`ID` int(50) NOT NULL AUTO_INCREMENT,
`SID` int(50) NOT NULL,
`FID` int(11) NOT NULL,
`sDateTime` datetime NOT NULL,
`elaspedTime` int(11) NOT NULL,
PRIMARY KEY (`ID`)
)
$sqldate1 =
"SELECT distinct tblflash.FID, tblflash.fname, IFNULL(sum(tblcount.elaspedTime),0)
FROM tblflash
left outer JOIN tblcount
ON tblflash.FID = tblcount.FID
WHERE tblcount.SID='".$_SESSION['SID']."'
ORDER BY tblflash.FID";
假设tblflash中有10行,tblcount中有10列和5列。所示的记录仅显示在5行中。我想显示所有没有重复的fname,如果null设置为0。
怎么了?
您的WHERE tblcount.SID='".$_SESSION['SID']."'
正在使查询充当INNER JOIN
-您需要添加or tblcount.SID IS NULL
您的WHERE
条件应用于联接的结果,而不是具体应用于tblcount
行。当两个表之间不匹配时,联接在所有tblcount
列中返回NULL。因此,NULL = 'whatever'
不会计算为true
,并且不会返回该行。
按照@cjk的建议,将OR tblcount.SID IS NULL
添加到WHERE中,或者将WHERE条件作为ON子句的一部分,如下所示:
$sqldate1 =
"SELECT distinct tblflash.FID, tblflash.fname, IFNULL(sum(tblcount.elaspedTime),0)
FROM tblflash
left outer JOIN tblcount
ON tblflash.FID = tblcount.FID
AND tblcount.SID='".$_SESSION['SID']."'
ORDER BY tblflash.FID";
其他5行的tblcount
中没有SID
的数据