0
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。

怎么了?

4

3 回答 3

1

WHERE tblcount.SID='".$_SESSION['SID']."'正在使查询充当INNER JOIN- 您需要添加or tblcount.SID IS NULL

于 2013-02-27T10:55:24.483 回答
1

您的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"; 
于 2013-02-28T13:20:06.197 回答
0

其他 5 行的SIDin没有数据tblcount

于 2013-02-27T11:01:27.800 回答