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 name
JOIN
表,那么最好重构数据库,而不是将关系存储在单列中了解数据库规范化我同意@MKhalidJunaid,因为您的数据库甚至不是一级规范化。而在您的场景中,它至少应该是2级。因此,您需要为产品和类别创建m2m表。我认为,
其中类别id“%$categoryid%”
是危险的,因为如果您搜索类别
3
,它还将返回具有
类别id
=
1,13
的记录,因为它包含
3
确定,如果使用
FIND_IN_SET
,情况就不一样了?
FIND_IN_SET
用于搜索逗号分隔的值。啊,好吧,这是我的错。但我会保留答案,因为标准化表就在那里。感谢您提供的信息@AhmedTaha。因为我从不使用
FIND\u IN\u SET