如何使用 codeigniter 编写“或”查询

问题描述 投票:0回答:3

我想在 Codeigniter 查询中编写类似

select*from bookdetails where editionId=$edid1 or editionId=$edid2;
的查询。

下面是我的 Codeigniter 查询

     public function get_rare_outofprintBooks($edid1,$edid2) 
     {
        $this->load->database();   
        $query = $this->db->get_where('bookdetails',array('edition_id'=>$edid1),array('edition_id'=>$edid2));  //i tried like this but its NOT Working  

   if ($query->num_rows() > 0)
        {
            foreach ($query->result() as $row)
            {
                $data[] = $row;
            }
            return $data;
        }
        return false;
   }

请帮我解决这个问题。

php mysql codeigniter
3个回答
4
投票
$this->db->where('editionId', $edid1);
$this->db->or_where('editionId', $edid2); 

它就在文档中http://ellislab.com/codeigniter/user-guide/database/active_record.html


3
投票
$this->db->where('id',3);
$this->db->or_where('id',5);

参考这里


0
投票
  • 您正在检查是否在特定列中找到两个值之一。 最明智的做法是使用

    IN
    条件。 查询生成器方法称为
    where_in()

  • 所有的后查询处理都是完全可以省略的。 只需返回生成的零个或多个对象的数组。 我从不从模型方法返回

    false
    ,否则会返回二维数组。

  • 如果您的

    $edid
    变量是字符串,请使用
    string
    键入提示两个参数;如果它们是整数,请输入提示为
    int
    作为最佳实践。

  • 您实际上不需要将自己限制为两个参数。 使用 spread/splat 运算符,您的方法可以接受可变数量的参数,并且为了方便/实用,这些值可以作为平面字符串数组进行访问。

  • 在下面的方法中添加了一个保护条件,因为如果没有传入任何参数,则

    where_in()
    将生成包含
    IN ()
    的无效查询(空的IN条件将破坏查询)。

public function get_rare_outofprintBooks(string ...$editionIds): array
{
    if (!$editionIds) {
        return [];
    }
    return $this->db
        ->where_in('edition_id', $editionIds)
        ->get('bookdetails')
        ->result();
}

可以使用可变数量的参数来调用上述方法,例如:

  • $results = $this->YourModelName->get_rare_outofprintBooks($id1);
  • $results = $this->YourModelName->get_rare_outofprintBooks($id1, $id2);
  • $results = $this->YourModelName->get_rare_outofprintBooks($id1, $id2, $id3);
  • 等等。

尽管如此,如果您想传递可变数量的版本 ID,模型方法直接接受数组而不是潜在的多个参数可能更有意义。

© www.soinside.com 2019 - 2024. All rights reserved.