2015-03-11 2 views
2

Я хочу выбрать данные из моей таблицы базы данных с запросом соединения, но мой он не работает.Codeigniter join query multiple conditions не работает

Мой запрос:

$this->db->select(); 
$this->db->from('we'); 
$this->db->join('schedule', 'schedule.itemid = we.cid'); 
$this->db->join('schedule', 'schedule.itemtype = 'testitem''); 
$this->db->where('we.isActive','Y'); 

Эта линия делает проблему с schedule.itemtype = 'testitem':

$this->db->join('schedule', 'schedule.itemtype = 'testitem''); 

Как я могу решить эту проблему?

+0

'$ this-> db-> Join ('расписание', 'schedule.itemtype = 'testitem'');' почему присоединиться? должен быть '$ this-> db-> где ('schedule.itemtype', 'testitem')' –

ответ

0

Попробуйте так:

$this->db->select(); 
$this->db->from('we'); 
$this->db->join('schedule', 'schedule.itemid = we.cid AND schedule.itemtype = \'testitem\''); 
$this->db->where('we.isActive','Y'); 
+0

объяснить, почему это может сработать – CodeGodie

0

Это будет работать:

$this->db->join('schedule', 'schedule.itemid = we.cid'); 
$this->db->where('we.isActive','Y'); 
$this->db->where('schedule.itemtype', 'testitem'); 
$this->db->get('we'); 
+0

синтаксическая ошибка, вам не хватает котировок – CodeGodie

+0

дайте это сейчас ... –

0

попробовать

$this->db->select(); 
$this->db->from("we"); 
$this->db->join("schedule", "schedule.itemid = we.cid"); 
$this->db->where("schedule.itemtype","testitem"); 
$this->db->where("we.isActive","Y"); 
+1

объясните, почему это может работать – CodeGodie

+0

так работает класс Active Record Class. я следую документации [guide] (http://www.codeigniter.com/user_guide/database/active_record.html), в которой объясняется, как использовать предложение Where. @CodeGodie –

0

Я считаю, есть две проблемы. Первая проблема заключается в том, что вы используете слишком много кавычек во второй join строке в запросе:

У вас есть: $this->db->join('schedule', 'schedule.itemtype='testitem''); < дополнительные цитаты

Это должно быть: $this->db->join('schedule', 'schedule.itemtype=testitem');


Вторая проблема : ваше соединение не имеет смысла.

Ваше утверждение:

$this->db->select(); 
$this->db->from('we'); 
$this->db->join('schedule', 'schedule.itemid = we.cid'); 
$this->db->join('schedule', 'schedule.itemtype = testitem'); 
$this->db->where('we.isActive','Y'); 

Переводит на:

SELECT * FROM we 
JOIN schedule ON schedule.itemid = we.cid 
JOIN schedule ON schedule.itemtype = testitem 
WHERE we.isActive = Y 

Как вы можете видеть, вы присоединяетесь к тем же таблицам дважды на разных линиях, не только это, но то, что таблица делает «testitem» принадлежит к? Остается предположить, что вы, возможно, хотите присоединиться, где ItemType = testitem который будет означать следующее:

SELECT * FROM we 
JOIN schedule ON schedule.itemid = we.cid 
WHERE schedule.itemtype = testitem 
AND we.isActive = Y 

Поэтому окончательный запрос Codeigniter должен быть:

$this->db->select('*'); 
$this->db->from('we'); 
$this->db->join('schedule', 'schedule.itemid = we.cid'); 
$this->db->where('schedule.itemtype', 'testitem'); 
$this->db->where('we.isActive','Y'); 
0
$this->db->query('select we_tbl.c_name from we we_tbl,schedule sch_tbl where sch_tbl.itemid = we_tbl.cid AND we_tbl.idActive = '.$activeData); 

Попробуйте этот запрос в соответствии с ваша проблема в этом может получить нужные вам данные. Я тестировал другую базу данных, но я пытался выполнить то, что вы пытаетесь получить. https://www.w3schools.com/sql/trysql.asp?filename=trysql_op_in

select 
pro_tbl.ProductName, 
cat_tbl.CategoryName , 
sup_tbl.SupplierName 
from 
Products pro_tbl, 
Suppliers sup_tbl, 
Categories cat_tbl 
where 
pro_tbl.SupplierID = sup_tbl.SupplierID AND 
pro_tbl.CategoryID = cat_tbl.CategoryID;