示例场景;让我说我正在寻找员工和他们的雇主
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']是空白的。我不确定如何解决这个问题,所以任何一点都会得到很高的评价。非常感谢:))
答案 0 :(得分:1)
SELECT tblEmployee.* FROM `tblEmployee`
LEFT JOIN `tblMappings` ON `tblEmployee`.`eid` = `tblMappings`.`eid`
tblEmployee
和tblMappings
都包含列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`