Codeigniter соединенные таблицы получают неправильный вывод - PullRequest
2 голосов
/ 16 декабря 2011

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

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

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

Ответы [ 3 ]

1 голос
/ 16 декабря 2011

Я думаю, вам может понадобиться использовать третий параметр 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'));
1 голос
/ 18 декабря 2011

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

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

Таблица

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 в таблице пользователей, затем установите его как наш внешний ключ и скажите, что он ссылается на groups id.

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

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

0 голосов
/ 16 декабря 2011

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

$this->db->select...
$this->db->from('bedrijf')
...
$query = $this->db->get()
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...