如何使用codeigniter在数据库中搜索逗号分隔的值



我试图通过一个类别列来过滤数据库,所以我搜索该类别并返回正确的项目。然而,有些项目有多个类别,所以我使用逗号分隔的值将两个或多个类别放在一列中。我试过这个方法:

public function get_cat_article($value)
{
$table = $this->get_table();
$this->db->where('cat', $value);
return $this->db->get($table);
}

但是它只获取分离的值中的第一个。我尝试使用"where_in",但也只获得了第一个值。我尝试了"喜欢",这很有效,但不是决定性的。搜索"WS"包括其他类别,如"IWS"。我在谷歌上搜索了一个解决方案,并建议使用fin_in_set,所以我尝试了:

public function get_cat_article($value)
{
$table = $this->get_table();
$this->db->where('find_in_set('.$value.',cat)');
return $this->db->get($table);
}

但这根本不起作用。我的语法错了吗?还是这是错误的方法?

您尝试过类似查询吗?在一个快速演示中,这对我有效。

public function get_cat_article($value)
{
$table = $this->get_table();
$this->db->like('cat', $value);  // say, $value = 'reebok'
return $this->db->get($table);
// Produces: SELECT * FROM $table WHERE `cat` LIKE '%reebok%' ESCAPE '!'
}

有关更多详细信息,请阅读CodeIgniter官方用户指南。

尝试类似的方法,但方法是:

public function get_cat_article($value)
{
$table = $this->get_table();
$this->db->like('cat', $value . ',', 'after');
$this->db->or_like('cat', ',' . $value . ',');
$this->db->or_like('cat', ',' . $value, 'before');
return $this->db->get($table);
}

使用MySql"find_in_set"技术,使用以下代码行似乎可以解决问题。我从这个网站上得到了代码,在逗号分隔的值中检查条件关键行是:

$this->db->where("FIND_IN_SET( '$post_period' , period) ");

我只是把语法搞错了。

相关内容

  • 没有找到相关文章

最新更新