Codeigniter连接查询多个条件不起作用

时间:2015-03-11 19:18:06

标签: php mysql codeigniter

我想通过连接查询从我的数据库表中选择数据,但我的工作并不起作用。

我的查询:

$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'');

我该如何解决这个问题?

6 个答案:

答案 0 :(得分:1)

您无需两次加入同一张桌子。 但只是扩展ON条款:

$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');

答案 1 :(得分: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');

答案 2 :(得分: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");

答案 3 :(得分: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

正如你所看到的那样,你们在不同的线路上连续两次加入同一张桌子,不仅仅是这样,而且是什么表格,以及#34; testitem"属于?我们可以假设您可能想要在itemtype = testitem中使用join,这意味着:

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'); 

答案 4 :(得分: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;

答案 5 :(得分:0)

两个可能的问题,取决于您期望的结果是什么

如果需要进行两次连接,而第二个join子句出现错误,请尝试使用双引号将条件值括起来,否则会出现解析错误:

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

如果只需要在多个条件下加入一次,请使用括号:

$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');

您的查询等同于写作:

select * from we
inner join schedule on schedule.itemid = we.cid
inner join schedule on schedule.itemtype = "testitem"
where we.isActive = 'Y'

但是您似乎需要的是

select * from we
inner join schedule on (schedule.itemid = we.cid AND schedule.itemtype = "testitem")
where we.isActive = 'Y'

在原始查询中,您正在执行两个联接。在后者中,您只会在多个条件下执行一项操作。