0

PHP/コードイグナイターを使用してデータを表示しています。私のテーブル (製品) には、「ProductCategory」というフィールドがあります。製品は複数のカテゴリに属する​​ことができ、プロジェクトの要件と XML ファイルに従って、このフィールドは次のように入力されました。

ID 121

商品コードm34

名前 ノキア 6800

製品カテゴリ 携帯 電話;ケーシング

ProductMainCategory ハンドセット

並べ替え順 3

////////////////////// 2番目の製品/////////////////////////

id 344

商品コード32344

名前 Xbox 360 ブラック

製品カテゴリ コンソール

ProductMainCategory 特別オファー

並べ替え順 5

////////////////////// 第三弾/////////////////////////

id 3433

商品コード342zxc4

名前 Iphone 5

製品カテゴリ アクセサリ;モバイル 4G

ProductMainCategory ハンドセット

並べ替え順 3

等々 .....

質問:

セミコロン (;) で 2 つのカテゴリの製品を区切ったので、セミコロンの製品カテゴリを分割しました';' 値を 2 つのカテゴリに分けて 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  

明確にするために、必要なクエリ出力をツリー構造で示しました。明確にするために、上記のデータと比較できます。親切に助けてください。ありがとう

4

1 に答える 1

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

ただし、時間の経過とともに新しいカテゴリが追加される可能性があるため、アドホックな 1 回限りのクエリに対してのみこれを行うことをお勧めします。

于 2012-12-13T14:49:40.450 に答える