Codeigniter присоединяется к нескольким условиям
Я использую класс Codeigniter Active Records, и я хочу присоединиться к моей таблице users
с моей таблицей clients
, чтобы я мог отображать "реальные" имена пользователей, а не только их идентификаторы.
Вот как выглядит таблица clients
(пример), а столбцы a_1, a_2 и a_3 соответствуют моей таблице users
, в частности, user id
:
clients
|--------|---------|----------|-----------|----------|
| id | name | a_1 | a_2 | a_3 |
|--------|---------|----------|-----------|----------|
| 1 | Paul | 2 | 4 | 1 |
И моя таблица users
выглядит так:
users
|--------|---------|----------|
| id | first | last |
|--------|---------|----------|
| 1 | Paul | Blake |
|--------|---------|----------|
| 2 | Dan | Doe |
|--------|---------|----------|
| 3 | Steve | Smith |
|--------|---------|----------|
| 4 | Harry | Jones |
|--------|---------|----------|
Итак, по существу, если бы я был выбран из таблицы clients
и JOIN it, он выглядел бы так:
clients
|--------|---------|----------|-----------|----------|
| id | name | a_1 | a_2 | a_3 |
|--------|---------|----------|-----------|----------|
| 1 | Paul | Dane Doe |Harry Jones|Paul Blake|
До сих пор я пробовал (который не работал, он просто отображает одно и то же имя для всех):
<?
$this->db
->select('name, a_1, a_2, a_3')
->from('clients')
->join('users', 'users.id=a_1 OR users.id=a_2 OR users.id=a_3');
Любая помощь будет замечательной!
Решение:
Вот что я смог придумать, какие работы (спасибо @elavarasan lee):
<?
$this->db
->select('CONCAT(u1.first," ", u1.last) as a_1_name, CONCAT(u2.first," ", u2.last) as a_2_name, CONCAT(u3.first," ",u3.last) as a_3_name', FALSE)
->from('clients')
->join('users AS u1', 'u1.id=a_1', 'left')
->join('users AS u2', 'u2.id=a_2', 'left')
->join('users AS u3', 'u3.id=a_3', 'left');
Ответы
Ответ 1
@Dodinas: Я получил промежутки решения MYSQL Query. Мне сложно преобразовать запрос в CI Active Record. Но попробуйте следующее:
$sql = "SELECT `name`, CONCAT(`u1`.`first`,' ', `u1`.`last`) as a_1,
CONCAT(`u2`.`first`,' ', `u2`.`last`) as a_2,
CONCAT(`u3`.`first`,' ', `u3`.`last`) as a_3
FROM `clients`
LEFT JOIN `users` as `u1` ON (`u1`.`id`=`a_1`)
LEFT JOIN `users` as `u2` ON (`u2`.`id`=`a_2`)
LEFT JOIN `users` as `u3` ON (`u3`.`id`=`a_3`)";
$result = $this->db->query($sql);
![screenshot of the query result taken from PHP Myadmin]()
Ответ 2
Попробуйте это
$this->db
->select('*')
->from('clients')
->join('users', 'users.id = clients.a_1 OR users.id=clients.a_2 OR users.id = clients.a_3');
$query = $this->db->get();
return $query->result();
Ответ 3
$this-> db-> where ('b_cdatetime BETWEEN "'. Date ('Ym-d', strtotime ($this-> input-> post ('from_date'))). '" И "'. Date (' Ym-d ', strtotime ($this-> input-> post (' to_date '))).' "'); $this-> db-> where ('tb_bill_history.b_status =', $this-> input-> post ('status')); $this-> db-> выберите ( '*');
$this-> db-> из ($ таблица); $this-> db-> join ('tb_bill_history', 'tb_bill_history.bill_no = mst_bills.b_bill_no AND tb_bill_history.b_exec_id = mst_executive.e_id');