我需要從MySQL結果集中存儲,檢索和創建列表,其中某些項目出現在多個位置,還需要將新項目默認爲列表的末尾,因此它最好不要使用單獨的表來控制它。在PHP中分解MySQL結果集
Product Position
Prod1 1 3
Prod2 2
創建列表
- PROD1
- Prod2的
- PROD1
這似乎矯枉過正,但我不能找到另一種方式是可行的。如果我從一個MySQL結果集到一個數組,我怎麼能將具有多個位置的項目分解爲代表我的列表的新數組項?
我需要從MySQL結果集中存儲,檢索和創建列表,其中某些項目出現在多個位置,還需要將新項目默認爲列表的末尾,因此它最好不要使用單獨的表來控制它。在PHP中分解MySQL結果集
Product Position
Prod1 1 3
Prod2 2
創建列表
這似乎矯枉過正,但我不能找到另一種方式是可行的。如果我從一個MySQL結果集到一個數組,我怎麼能將具有多個位置的項目分解爲代表我的列表的新數組項?
$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);
您需要兩個表格。第一個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()
。
這不能解決的問題是當Prod3被添加時,它不會在菜單上。舊系統手動控制菜單,因此必須在CMS中專門添加項目,我想將其自動化,因此試圖將其保留在產品表格中。主要的是產品可以在多個子類別中,並且每個項目的順序都可以更改(例如,它不是字母) – MattP 2012-02-29 09:10:14
如果您添加Prod3,只需將其添加到列表中。但我明白你的意思了...... – PiTheNumber 2012-02-29 09:14:42
看看我的更新。 – PiTheNumber 2012-02-29 09:20:23
每個位置只有一個產品?另外,是否有更多的位置在一行中用空格分開,就像在你的例子中那樣? – 2012-02-29 08:52:30
格式靈活,每個位置一個項目,但有些項目位於多個子類別中,用戶可以獨立定義每個列表項目和子列表項目的順序(拖放重新排序) – MattP 2012-02-29 09:07:44