mysql оставил соединение с нулями в php - PullRequest
0 голосов
/ 31 августа 2011

Пример сценария;Допустим, я ищу сотрудников и их работодателей

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

Но для Гарри $ row ['eid'] пусто.Я не уверен, как решить эту проблему, поэтому любые вопросы будут с благодарностью.Большое спасибо:)

Ответы [ 3 ]

1 голос
/ 31 августа 2011

Поле eid из tblEmployee не пусто, но поле eid из tblMappings пусто, что ожидается, поскольку в этой таблице нет подходящей записи. Укажите, какие поля вы хотите вместо SELECT * ....

SELECT e.*, m.mid, m.cid FROM `tblEmployee` e
LEFT JOIN `tblMappings` m ON 
e.`eid` = m.`eid`
1 голос
/ 31 августа 2011

Вы не должны использовать SELECT *.Это плохая привычка.

Вместо этого, подумайте:

SELECT `tblEmployee`.`eid` FROM `tblEmployee`
LEFT JOIN `tblMappings` ON 
`tblEmployee`.`eid` = `tblMappings`.`eid`
1 голос
/ 31 августа 2011
SELECT tblEmployee.* FROM `tblEmployee`
LEFT JOIN `tblMappings` ON `tblEmployee`.`eid` = `tblMappings`.`eid`

И tblEmployee, и tblMappings также содержат столбец eid,
и, естественно, второй ид от tblMappings переопределяет первый.

Чтобы решить эту проблему, вы можете указать имя таблицы в возвращаемых столбцах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...