我想通过连接查询从我的数据库表中选择数据,但我的工作并不起作用。
我的查询:
$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 :(得分: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'
在原始查询中,您正在执行两个联接。在后者中,您只会在多个条件下执行一项操作。