Intereting Posts

Codeigniter присоединил таблицы, получившие неправильный вывод

У меня есть функция, которая получает данные из моей базы данных и объединяет разные таблицы. Это метод:

public function getCallcenterCall() { $this->db->select('bedrijf.*, status.status_naam, quickscan.datum_verzonden'); $this->db->join('quickscan', 'bedrijf.id = quickscan.bedrijf_id'); $this->db->join('status', 'bedrijf.status = status.status_id'); $this->db->where('status', '0'); $query = $this->db->get('bedrijf'); return $query->num_rows() > 0 ? $query-> result_array() : FALSE; } 

В статусе таблицы я получил 3 строки: 'id' , 'status_id' , 'status_naam' . На мой взгляд, я status_naam , но здесь он ошибается.

Вместо того, чтобы дать мне 'status_naam' который принадлежит 'status_id=0' ; он дает мне 'status_naam' где 'status_id=1' .

То же самое происходит, если я пытаюсь получить 'status_naam' для 'status_id=1' тогда он дает мне 'status_naam' из 'status_id=2' .

Что я делаю не так? Заранее спасибо!

Является ли ваша настройка базы данных для использования ограничений внешнего ключа?

простой пример:

таблицы

 create table `groups`( `id` int(10) unsigned not null auto_increment primary key, `name` varchar(30) not null, `colour` varchar(7) not null, `created_at` datetime not null, `updated_at` datetime not null )engine=innodb; create table `users`( `id` int(10) unsigned not null auto_increment primary key, `group_id` int(10) unsigned not null, `permissions` varchar(255) not null default '{[u, r, d]}', `created_at` datetime not null, `updated_at` datetime not null, index(group_id), foreign key(group_id) references groups(id) )engine=innodb; 

Сырой SQL

 select g.name, u.permissions from users as u left join groups as g on g.id = u.group_id where id=1 

Как вы видите, вы устанавливаете индекс group_id в таблице users, затем устанавливаете его как наш внешний ключ и говорите ему, чтобы ссылаться на идентификатор groups .

двигатель innodb необходим, и строки должны совпадать одинаково.

… надеюсь, что имеет смысл

Я думаю, вам может понадобиться использовать третий параметр join , например

 $this->db->join('quickscan', 'bedrijf.id = quickscan.bedrijf_id', 'inner'); $this->db->join('status', 'bedrijf.status = status.status_id', 'inner'); 

Если это все еще не удастся, вам может потребоваться вместо этого выполнить пользовательский запрос:

 $s = 'SELECT '; $s .= 'bedrijf.*, status.status_naam, quickscan.datum_verzonden '; $s .= 'FROM bedrijf '; $s .= 'INNER JOIN quickscan ON bedrijf.id = quickscan.bedrijf_id '; $s .= 'INNER JOIN status ON bedrijf.status = status.status_id '; $s .= 'WHERE (status = ?)'; $query = $this->db->query($s, array('0')); 

Вы пытались использовать метод from?

 $this->db->select... $this->db->from('bedrijf') ... $query = $this->db->get() ...