2013-02-26 47 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";