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、結合の結果に適用されます。また、2 つのテーブル間に一致がない場合、結合はすべての列で NULL を返します。その結果、評価されず、行は返されません。tblcounttblcountNULL = '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 行SIDにはデータがありませんtblcount

于 2013-02-27T11:01:27.800 に答える