У меня простой запрос на объединение влево.
SELECT e.employee_id as employee , e.badge_id as badge , e.first_nm as first , e.last_nm as last , e.work_phone as work_ph , e.mobile_phone as mobile_ph , e.manager_id as man_id , e.title_id as titl_id , e.username as user , e.start_dt as start , m.employee_id as memp_id , m.last_nm as m_last , m.first_nm as m_first , t.title_nm as titl_nm FROM employee e left join employee m on e.manager_id = m.employee_id left join title t on e.title_id = t.title_id WHERE e.employee_id = 1
Если я использую псевдонимы столбцов, как я сделал выше, запрос работает нормально. Однако, если я не использую псевдонимы, некоторые значения не возвращаются. Например, следующее возвращает пробел, если я не даю столбцу псевдоним.
e.first_nm as first //returns "Robert" e.first_nm //returns "" e.first_nm as first_nm //returns "" (alias matches column name)
В этом же запросе,
e.middle_nm //will return "P"
независимо от того, имеет ли он псевдоним или нет. Я озадачен.
Я дал свои псевдонимы таблиц, и я использовал псевдоним таблицы в именах столбцов, поэтому не должно быть никаких неоднозначных имен столбцов.
Любые мысли были бы оценены. Благодаря,
обкрадывать
У вас есть два столбца с тем же именем, что и first_nm
и, вероятно, PDO не знает, что возвращается в ваш код, а затем возвращает простое ». Хотя они находятся в разных таблицах, когда пришли к записи, у них одно и то же имя … вы видите проблему?
У вас есть два столбца с тем же именем, что и first_nm
и mysql знает, как вернуть их все в порядке, а затем вернуть простой «first_nm» для обоих. И тогда PDO должны назначить их членам массива, делая имена полей в виде ключей массива. Существует только один способ:
$row['first_nm'] = first col; $row['first_nm'] = second col;
Если вы попытаетесь увидеть в строке $ row, сколько записей вы найдете?
Таким образом, вы либо должны использовать FETCH_ROW, либо дать своим полям разные имена. Это ни mysql, ни PDO не виноваты – это как раз то, как все работает.