2012-02-29 10 views
0

いくつかのアイテムが複数の位置に表示されるMySQL結果セットからリストを格納、取得、作成する必要があります。また、リストの最後に新しいアイテムをデフォルト設定する必要があります別のテーブルを使用して制御しない方が良いでしょう。リストにPHPでMySQL結果セットを解読する

  • を作成するには

    Product Position 
    Prod1 1 3 
    Prod2 2 
    

    PROD1

  • PROD2
  • PROD1

それは行き過ぎと思われるが、私は仕事と別の方法を見つけることができません。 MySQLの結果セットから配列に移動した場合、リストを表す新しい配列アイテムに複数の位置のアイテムをどのように爆発させることができますか?

+0

各ポジションには1つの製品がありますか?また、あなたの例のように空白で区切られた複数の位置が1行にありますか? –

+0

フォーマットは柔軟性があり、位置ごとに1つのアイテムがありますが、複数のサブカテゴリにあるアイテムがあり、ユーザーは各リストアイテムとサブリストアイテムの順序を独立して定義できます(ドラッグの並べ替え順序を変更) – MattP

答えて

0
$data = array(
    array('product' => 'prod 1', 'position' => '1 3'), 
    array('product' => 'prod 2', 'position' => '2'), 
); 

$data_ordered = array(); 

foreach ($data as $row) { 
    foreach (explode(' ', $row['position']) as $subrow) { 
     $data_ordered[$subrow] = $row['product']; 
    } 
} 

ksort($data_ordered); 

var_dump($data_ordered); 
-1

2つのタブが必要です。最初にproducs(IDと名前を使用)

id name 
1 Prod1 
2 Prod2 

また、リストの順序が必要です。たぶん、あなたは、データベースから、ID 1のGet項目のリストを印刷し、explode(',', $items);をしたい場合は、この

list 
id items 
1 1,2,1 

のような。今度はすべてのアイテムIDの名前を取得します。多くの製品がない場合は、一度にすべての製品を入手し、アレイに保存してより高速にアクセスできます。

更新

それはない良いデザインいますが、一つのテーブルでそれをしたい場合:リストはlist_id:position,[list_id:position], ...が含まれてい

id name lists 
1 Prod1 1:1,1:3 
2 Prod2 1:2 

。リストを表示するには、すべてのプロダクトを取り出してリストにあるかどうかを確認する必要があります。ksort()を使用できるように、position => product_rowの配列を作成します。

+0

これは解決しないProd3を追加すると、メニューには表示されません。古いシステムは手動でメニューを制御していたので、CMS内でアイテムを特別に追加する必要があったため、自動化して製品テーブル内に保持したいと思っています。主なことは、製品が複数のサブカテゴリにある可能性があり、すべてのアイテムの順序を変更できることです(アルファベット順ではありません) – MattP

+0

Prod3を追加するだけでリストに追加するだけです。しかし、私はあなたが意味するものを参照してください... – PiTheNumber

+0

私の更新をチェックしてください。 – PiTheNumber

関連する問題