2011-08-31 62 views
0

示例場景;可以說我正在尋找僱員和他們的僱主mysql在php中加入了空值

tblEmployee 
eid | name 
1 | james 
2 | harry 

tblCompany 
cid | name 
1 | ABC Ltd 
2 | XYZ Corp 

tblMappings 
mid | eid | cid 
1 | 1 | 2 

詹姆斯被分配到公司XYZ Corp,但哈里沒有任務。無論他們是否被分配,我都想把所有員工都拿出來;

SELECT * FROM `tblEmployee` 
LEFT JOIN `tblMappings` ON 
`tblEmployee`.`eid` = `tblMappings`.`eid` 

這將在phpMyAdmin中返回以下內容;

eid | name | mid | eid | cid 
1 | james | 1 | 1 | 2 
2 | harry | NULL | NULL | NULL 

我在執行PHP的查詢和使用:

while($row=mysql_fetch_assoc($results)) { ...blah.... } 

但對哈利$行[ '開齋節']爲空白。我不知道如何解決這個問題,所以任何問題都會得到很好的解決。非常感謝:)

回答

1

tblEmployeeeid字段不爲空指定表名,但是從tblMappingseid字段爲空,這是意料之中的,因爲有一個在沒有匹配的記錄那張桌子。指定您想要的字段而不是SELECT * ...

SELECT e.*, m.mid, m.cid FROM `tblEmployee` e 
LEFT JOIN `tblMappings` m ON 
e.`eid` = m.`eid` 
+0

我使用SELECT *,因爲有喜歡的姓氏更多員工字段和地址等,實際上我確實想要他們,但是這是你爲我提供了新的語法,有些事情要去了解並解決了我的問題。非常感謝 :) – jwbensley

1
SELECT tblEmployee.* FROM `tblEmployee` 
LEFT JOIN `tblMappings` ON `tblEmployee`.`eid` = `tblMappings`.`eid` 

兩個tblEmployeetblMappings還包含列eid
自然從tblMappings第二EID是覆蓋的第一個。

爲了解決這個問題,你可以在返回列

1

您不應該使用SELECT *。這是一個壞習慣。

相反,考慮一下:

SELECT `tblEmployee`.`eid` FROM `tblEmployee` 
LEFT JOIN `tblMappings` ON 
`tblEmployee`.`eid` = `tblMappings`.`eid`