mysql在php中保留了与null的连接

时间:2011-08-31 15:48:36

标签: php mysql join null

示例场景;让我说我正在寻找员工和他们的雇主

tblEmployee
eid | name
1  | james
2  | harry

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

tblMappings
mid | eid | cid
1  | 1   | 2

詹姆斯被分配到公司XYZ公司,但哈里没有任务。我想拉出所有员工是否被分配;

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.... }

但是对于哈里$ row ['eid']是空白的。我不确定如何解决这个问题,所以任何一点都会得到很高的评价。非常感谢:))

3 个答案:

答案 0 :(得分:1)

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

tblEmployeetblMappings都包含列eid
当然,来自tblMappings的第二个eid会覆盖第一个eid。

要解决此问题,您可以在返回列

中指定表名

答案 1 :(得分:1)

来自eid的{​​{1}}字段不为空,但tblEmployee中的eid字段为空,这是预期的,因为该表中没有匹配的记录。指定您想要的字段而不是tblMappings

SELECT * ...

答案 2 :(得分:1)

您不应该使用SELECT *。这是一个坏习惯。

相反,请考虑一下:

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