MySQL查询和PHP挑战..分割分号值

时间:2012-12-13 10:32:28

标签: php mysql codeigniter

我使用PHP /代码点火器来显示数据。 在我的表(产品)中,我有一个名为“ProductCategory”的字段。由于产品可以属于多个类别,并且根据我的项目要求和XML文件,此字段填充如下:

id 121

ProductCode m34

名称诺基亚6800

ProductCategory 手机;外壳

ProductMainCategory 手机

sort_order 3

//////////////////////第二产品/////////////////////// ///

id 344

ProductCode 32344

名称 Xbox 360 Black

ProductCategory 控制台

ProductMainCategory 特别优惠

sort_order 5

第三产品/////////////////////// ///

id 3433

ProductCode 342zxc4

名称 Iphone 5

ProductCategory 配件;手机4G

ProductMainCategory 手机

sort_order 3

依旧.....

问题:

因为,我已经将产品分为两个类别,分别为semcolon(;) 拆分分号产品类别';'将值分为两类并在url中传递它们以根据“ProductCategory”和“ProductMainCategory”显示产品。 我正在使用查询字符串/ uri段来显示我的产品。

<?
$id2=urldecode($this->uri->segment(3)); //  gets values like Handsets
$id=urldecode($this->uri->segment(4));  // gets values like Mobiles
$this->db->like('ProductCategory',$id);

$this->db->or_like('ProductCategory',';'.$id);
//$this->db->not_like('ProductCategory','Store 8');
//$this->db->like('ProductCategory',';'.$id);
$this->db->where('ProductMainCategory',$id2);
$this->db->order_by('sort_order','asc');
$query_data=$this->db->get('Products');
?>

根据代码和MYSQL数据,我如何显示我的单个产品,以便它可以单独显示在每个类别下(根据查询字符串/ uri段值),如下所示:

Handsets¬
         |-Mobiles
                  |--- Nokia 6800
         |-Casings
                  |---- Nokia 6800    

         |-Mobiles 4G
                  |--- Iphone 5 
         |-Accessories
                  |---- Iphone 5    


  Special Offers¬
                |-Consoles
                         |---Xbox 360 Black  

我已经在树形结构中显示了所需的查询输出以供澄清。您可以将它与上面的数据进行比较以获得澄清。请帮助我。谢谢

1 个答案:

答案 0 :(得分:0)

我假设您有一个名为ProductCategories的有效产品类别表。您可以使用复杂的连接条件按类别获取产品。以下是一个计算每个类别中产品数量的示例:

select pc.ProductCategory, count(*) as NumProducts
from Products p join
     ProductCategories pc
     on concat(';', p.ProductCategory, ';') like concat('%;', pc.ProductCategory, '%;')
group by pc.ProductCategory

如果您没有ProductCategories表,可以在查询中创建一个:

select pc.ProductCategory, count(*) as NumProducts
from Products p join
     (select 'Console' as ProductCategory union all
      select . . .
     ) pc
     on concat(';', p.ProductCategory, ';') like concat('%;', pc.ProductCategory, '%;')
group by pc.ProductCategory

但是,我只建议这样做是为了进行临时的一次性查询,因为可能会随着时间的推移添加新的类别。