2012-04-18 19 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

相关问题