使用关联数组的多个LIKE数据库查询 - 但是所有来自相同的列名...?

时间:2011-01-17 13:54:14

标签: codeigniter foreach chained

我正在尝试使用CodeIgniter的活动记录类来查询我的数据库。我有一些存储在表格中的博客文章。该查询用于搜索功能,该功能将提取分配给它们的特定类别的所有帖子。因此,表格的“类别”列将列出该帖子的所有类别,没有特定的顺序,用逗号分隔,如下所示:政治,历史,社会学。等

如果用户选择“政治”和“历史记录”,则应返回同时具有这些类别的所有帖子的标题。

因此,查询的类别列表将是数组$ cats。我认为这会奏效 -

foreach ($cats as $cat){
    $this->db->like('categories',$cat);
}

通过制作:

$this->db->like ('categories','Politics');
$this->db->like ('categories','History');

(这会产生''类别类别'%政治%'和类别类似'%历史%')

但它不起作用,似乎只产生了第一个声明。我猜的问题是每个链式查询的列名是相同的。 CI用户指南中似乎没有任何内容(http://codeigniter.com/user_guide/database/active_record.html),因为它们似乎假设每个链式语句将用于不同的列名。

当然不可能在一个语句中使用关联数组,因为它必须包含重复键 - 在这种情况下,每个键都必须是'类别'...

2 个答案:

答案 0 :(得分:5)

关于MySQL,我只是在我的数据库上运行以下查询,没有问题。

 SELECT * 
 FROM  `TicketUpdates` 
 WHERE content LIKE  '%update%'
 AND content LIKE  '%footprints%';

同样,以下代码按预期运行:

 $this->db->select('*'); 
 $this->db->from('TicketUpdates');
 $this->db->like('content', 'update');   
 $this->db->like('content', 'footprints');       
 print_r($this->db->get()->result());

如果你在CI中使用'like'函数,你必须使用正确的查询函数为它们添加前缀和后缀,例如:

 $this->db->select('*');
 $this->db->from('tablename');
 foreach($cats as $cat){
    $this->db->like('categories', $cat);
 }
 $result = $this->db->get();

答案 1 :(得分:3)

您可以使用以下代码

$this->db->select("*")->from($table);

foreach($cats as $single_name)
        $this->db->or_like("categories",$single_name);

$result = $this->db->get();