Php 从特定类别codeigniter中选择产品
产品分为以下几类Php 从特定类别codeigniter中选择产品,php,mysql,codeigniter,Php,Mysql,Codeigniter,产品分为以下几类 product_id category_id 2 1,2 3 1,3 4 1,13 2 2,5 我想选择特定类别的产品,例如类别2中的所有产品。sql语法是什么您可以使用FIND_IN_SET以逗号分隔的值搜索 $this->db->where("FIND_IN_SET( '$category_id' , category_ids)
product_id category_id
2 1,2
3 1,3
4 1,13
2 2,5
我想选择特定类别的产品,例如类别2中的所有产品。sql语法是什么您可以使用
FIND_IN_SET
以逗号分隔的值搜索
$this->db->where("FIND_IN_SET( '$category_id' , category_ids) ");
<?php
$this->db->select();
$this->db->from('table_name');
$this->db->where(' FIND_IN_SET(category_ids, "' . $category_ids . '") > 0', NULL, false);
$query = $this->db->get();
return $query->result();
?>
所以你的整个问题应该是
$this->db->select();
$this->db->from('table_name');
$this->db->where("FIND_IN_SET( '$category_id' , category_ids) ");
$query = $this->db->get();
return $query->result();
您可以尝试此
FIND_IN_SET
搜索逗号分隔的值
$this->db->where("FIND_IN_SET( '$category_id' , category_ids) ");
<?php
$this->db->select();
$this->db->from('table_name');
$this->db->where(' FIND_IN_SET(category_ids, "' . $category_ids . '") > 0', NULL, false);
$query = $this->db->get();
return $query->result();
?>
您可以使用一个简单的SQL查询&在您的模型中使用它
public function get_product_category($category_id)
{
$query = "SELECT * FROM product_table WHERE category_id LIKE '%$categoryid%'";
return $this->db->query($query, $category_id)->result();
}
它将在您的产品表中找到,其中category\u id
包含示例2
但是,正如M Khalid Junaid所说,您最好了解数据库规范化
例如:标准化表
这是规范化之前的表,产品ID在2
上重复,如果这是主键,怎么可能?所以,尝试将您的表更改为规范化表,这将对您有很大帮助
product_id category_id
2 1,2
3 1,3
4 1,13
2 2,5
这是一个新表,在创建名为group\u table
或其他任何名称的表后进行规范化。然后将组id
设置为主键
group_id product_id category_id
1 2 1
2 2 2
3 3 1
4 3 3
5 4 1
6 4 13
7 2 5
从category_id查找产品的查询更简单,只是
从组表中选择*,其中category\u id=$category\u id
或者你想创造的任何条件。例如,如果您只想从product\u table
中获取product nameJOIN
表,那么最好重构数据库,而不是将关系存储在单列中了解数据库规范化我同意@MKhalidJunaid,因为您的数据库甚至不是一级规范化。而在您的场景中,它至少应该是2级。因此,您需要为产品和类别创建m2m表。我认为,其中类别id“%$categoryid%”
是危险的,因为如果您搜索类别3
,它还将返回具有类别id
=1,13
的记录,因为它包含3
确定,如果使用FIND_IN_SET
,情况就不一样了?FIND_IN_SET
用于搜索逗号分隔的值。啊,好吧,这是我的错。但我会保留答案,因为标准化表就在那里。感谢您提供的信息@AhmedTaha。因为我从不使用FIND\u IN\u SET