Codeigniter join query multiple conditions don't work

前端 未结 6 1266
温柔的废话
温柔的废话 2021-01-14 11:12

I want to select data from my database table with join query, but my it doesn\'t work.

My query:

$this->db->select();
$this->db->from(\'w         


        
相关标签:
6条回答
  • 2021-01-14 11:23

    This will work:

    $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 讨论(0)
  • 2021-01-14 11:26

    You don't need to join same table twice. But just to extend ON clause:

    $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 讨论(0)
  • 2021-01-14 11:26

    I believe there are two problems here. The first problem is that you are using one too many quotes in the second join line in your query:

    You have: $this->db->join('schedule', 'schedule.itemtype='testitem''); < extra quote

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


    Second problem: your join doesnt make sense.

    Your statement:

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

    Translates to:

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

    As you can see you are joining the same table twice on different lines, not only that but what table does "testitem" belong to? We are left to assume that you perhaps want the join where itemtype = testitem which will mean this:

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

    Therefore your final Codeigniter query should be:

    $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 讨论(0)
  • 2021-01-14 11:27

    Two possible problems, depending on what your desired outcome is:

    If you need to make two joins and are getting an error with the second join clause, try using double quotes to enclose the constant value on the condition or you'll get a parse error:

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

    If you need to join only once with multiple conditions, use parentheses:

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

    You query is equivalent to writing:

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

    but what you seem to need is

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

    On your original query, you are doing two joins. In the latter, you'll do only one with multiple conditions.

    0 讨论(0)
  • 2021-01-14 11:28
    $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);
    

    Try this query according to your problem this could get the data you need. I've tested on different database but i tried to perform what you're trying to get. 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;
    
    0 讨论(0)
  • 2021-01-14 11:34

    try

    $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 讨论(0)
提交回复
热议问题