Почему CodeIgniter Active Record и phpMyAdmin дают разные результаты? - PullRequest
1 голос
/ 06 января 2011
SELECT accounts.NameSurname, Projects.Name, personnels.NameSurname 
FROM accounts 
JOIN projects ON ( accounts.Id = projects.AccountId ) 
JOIN projectpersonnels ON ( projects.Id = projectpersonnels.ProjectId ) 
JOIN accounts AS personnels ON ( projectpersonnels.AccountId = personnels.Id )

приводит к NameSurname Name NameSurname colums


Почему запросы выше и ниже приводят к различным заголовкам "столбцов" и количеству столбцов?Я запускаю запрос выше в phpmyadmin.использование mysql и codeigniter 1.7.3


$this->db->select('accounts.NameSurname,projects.Name,personnels.NameSurname');
$this->db->from('accounts');
$this->db->join('projects','accounts.Id = projects.AccountId' );
$this->db->join('projectpersonnels','projects.Id = projectpersonnels.ProjectId');
$this->db->join('accounts as personnels','projectpersonnels.AccountId = personnels.Id');
$q=$this->db->get();

приводит к: NameSurname (который является персоналом) Name (который является проектом)

Спасибо за чтение и ответ.

1 Ответ

1 голос
/ 06 января 2011

Это связано с тем, как CI создает результаты. У вас есть столкновение имен. Обе NameSurname пытаются присвоить один и тот же «ключ» в вашем объекте / массиве результата. Поскольку personnels.NameSurname является вторым, оно перезаписывает значение accounts.NameSurname (потому что оно присваивается той же клавише). Если бы вы использовали accounts.NameSurname as aNameSurname (не уверен на 100%, правильный ли это синтаксис для MySQL) вместо accounts.NameSurname, это, вероятно, сделает ваши результаты непротиворечивыми.

Это на самом деле может привести к той же проблеме с классами PDO и в определенных обстоятельствах: FETCH_ASSOC и FETCH_OBJ будут отображать только два столбца, а FETCH_ARRAY будет отображать три. FETCH_BOTH приведет к наличию трех числовых индексов и двух ассоциативных индексов. (Не то чтобы вы спрашивали о PDO, но я подумал, что это может проиллюстрировать эту мысль).

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