2012-04-18 46 views
0

我有一個用戶可編輯列表像項目符號點。頻繁地刪除和添加點(到列表的末尾或中間)。有沒有更有效的方法來維護這個列表的ORDER,而不是讓每個子彈都有一個id,並保持用逗號分隔的順序的SQL條目?例如:有效維護像mysql中的列表項目符號點的順序

$result = mysql_query("SELECT order FROM users WHERE user = '$userId'"); //Get order for logged in user. returns id1,id2,id3,id4 
$row = mysql_fetch_array($result); 
$order = explode(',', $row['order']); //make the order an array 
$result = mysql_query("SELECT id, data FROM bullets"); //get all the bullets 
$bullets = array(); 
while($row = mysql_fetch_array($result)){ 
    $project[$row['id']] = $row['data']; 
} 

然後運行:

foreach($order as $k => $v){ 
    echo '<li id="'.$k.'">'.$v.'</li>'; 
} 

回答

2

您可以在ordinal字段添加到子彈表。

那麼你的選擇看起來是這樣的:

SELECT id, data FROM bullets ORDER BY ordinal 

而且,你不應該像你與秩序users表做存儲非規範化的數據。

此外,您不應將字段名稱order,因爲它是保留字。

+0

所以你說每個子彈添加它的位置值作爲一個int?我正在考慮這樣做,但遇到了一個問題。如果用戶只訪問部分數據,那麼訂單就會混亂。例如,如果完整訂單是'id1,id2,id3,id4',用戶訪問'id2,id3'然後將id5添加到他的末尾,它看起來像是'id2,id3,id5',但是在更大的方案中它應該是'id1,id2,id3,id5,id4' – 2012-04-18 04:49:46

+1

不要簡單地添加到您的代碼中的數字。讓數據庫處理這個序列或做更新,你添加最大(序數) – 2012-04-18 04:54:35

+0

也許我不理解如何使用序號字段..? – 2012-04-18 05:07:03