2012-03-31 54 views
0

我有一個項目列表(如待辦事項列表),需要以特定順序呈現。此訂單可能會更改,並且可能會添加新項目(在任何位置)並刪除項目。我試圖決定什麼是存儲這些項目順序的好方法,以便於更新列表和顯示數據。在待辦事項列表中存儲訂單信息(我有2個選項)

我可以將訂單信息存儲在每個項目的字段中。這可以很容易地按照該字段對項目進行排序。但問題是如果我想在列表頂部添加一個新項目,我必須修改該列表中的所有其他項目(如果我有50個待辦事項,那麼我必須修改50個記錄)。

另一種選擇是將項目的順序存儲在待辦事項列表對象本身中。所以我會將訂單存儲爲字符串23,45,34,100。如果順序改變,我只是改變待辦事項列表對象中的那個1字段。 問題是要呈現項目,我不能簡單地讓他們訂購。從數據庫中檢索項目後,我必須找出一種方法來根據該訂單字符串排序項目。

因此,任何提示存儲順序位的好方法?我有這2個選項,但我可以採用其他方式。我正在尋找能夠輕鬆呈現數據的東西,但在更改訂單時不會太難。

Sample data 

id  value  order 
---------------------- 
1  item 5 5  
2  item 1 1 
3  item 4 4 
4  item 2 2 
5  item 3 3 

output 
------ 
item 1 (id 2) 
item 2 (id 4) 
item 3 (id 5) 
item 4 (id 3) 
item 5 (id 1) 
+0

你可以發佈一些樣本數據和所需的o/p – Teja 2012-03-31 03:43:30

+0

儘管更新會更長,我認爲你的第一種方法是更有意義的方法。將訂單保留爲數據庫中的字段,您將可以輕鬆查詢所需的信息。如果有變化,PHP將不得不循環/更新訂單。 – mikevoermans 2012-03-31 04:04:30

+0

@mikevoermans我關心的不是php,而是數據庫本身。要更新,根據列表的長度,我必須打50次或更多的數據庫。這讓我有點擔心。 – sameold 2012-03-31 04:09:29

回答

0
SELECT value 
FROM Sampledata 
ORDER BY 
CASE WHEN id=2 
THEN value END, 
CASE WHEN id=4 
THEN value END, 
CASE WHEN id=5 
THEN value END, 
CASE WHEN id=3 
THEN value END, 
CASE WHEN id=1 
THEN value END; 
0

你可以使用一個關聯數組,但鍵可以與uniquid來產生()。

您應該將ID作爲每個項目的一部分存儲(可能使用uniqid()生成),並按照它們的排序順序保存這些ID的數組。然後,您將訂單保存爲一組ID。

更改排序數組的順序,並更改輸出的順序。根據排序數組輸出值很容易。

$values = array(
    '4f7684747c784' => array(...), 
    '4f76846f0561c' => array(...), 
    '4f76847aa7759' => array(...), 
); 

$sort = array('4f76846f0561c', '4f7684747c784', '4f76847aa7759'); 

foreach($sort as $key) { 
    // do something with $values[$key] 
}