2013-02-26 107 views
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.左连接,ISNULL,IFNULL不起作用

怎么了?

回答

1

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

0

有用于SID没有数据tblcount其它5行

1

WHERE条件被应用到的结果加入,不是具体到tblcount行。当两个表之间不匹配时,连接将在所有tblcount列中返回NULL。因此,NULL = 'whatever'评估为true并且该行不返回。

要么添加OR tblcount.SID IS NULL到作为@cjk has suggested或使ON子句的WHERE条件的一部分,就像这样:

$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";