2012-02-29 61 views
0

我需要從MySQL結果集中存儲,檢索和創建列表,其中某些項目出現在多個位置,還需要將新項目默認爲列表的末尾,因此它最好不要使用單獨的表來控制它。在PHP中分解MySQL結果集

Product Position 
Prod1 1 3 
Prod2 2 

創建列表

  • PROD1
  • Prod2的
  • PROD1

這似乎矯枉過正,但我​​不能找到另一種方式是可行的。如果我從一個MySQL結果集到一個數組,我怎麼能將具有多個位置的項目分解爲代表我的列表的新數組項?

+0

每個位置只有一個產品?另外,是否有更多的位置在一行中用空格分開,就像在你的例子中那樣? – 2012-02-29 08:52:30

+0

格式靈活,每個位置一個項目,但有些項目位於多個子類別中,用戶可以獨立定義每個列表項目和子列表項目的順序(拖放重新排序) – MattP 2012-02-29 09:07:44

回答

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

您需要兩個表格。第一個producs帶ID和名稱

id name 
1 Prod1 
2 Prod2 

此外,您還需要列表的順序。也許這樣

list 
id items 
1 1,2,1 

如果你要打印ID爲1.從數據庫中獲取項目列表中,並做了explode(',', $items);。現在獲取每個項目ID的名稱。如果你沒有很多產品一次購買所有產品,並將它們存儲在一個陣列中以加快訪問速度。

更新

這不是一個很好的設計,但如果你想在一個表:

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

,其中列出了包含list_id:position,[list_id:position], ...。但要查看列表,您必須提取所有產品並檢查它是否在列表中。1.使用position => product_row創建一個數組,以便您可以使用ksort()

+0

這不能解決的問題是當Prod3被添加時,它不會在菜單上。舊系統手動控制菜單,因此必須在CMS中專門添加項目,我想將其自動化,因此試圖將其保留在產品表格中。主要的是產品可以在多個子類別中,並且每個項目的順序都可以更改(例如,它不是字母) – MattP 2012-02-29 09:10:14

+0

如果您添加Prod3,只需將其添加到列表中。但我明白你的意思了...... – PiTheNumber 2012-02-29 09:14:42

+0

看看我的更新。 – PiTheNumber 2012-02-29 09:20:23