我应该如何处理数据排序,同时保持灵活性以适应未来的变化?

时间:2011-01-05 01:37:15

标签: php mysql database-design

我正在使用php& amp;编写一个Web应用程序。 mysql,并且想知道接近某事的最佳方法。该应用程序很简单,处理包含文本的显示框(“单元格”)。 这是问题所在: 比方说,我要显示3个单元格:Cell A,Cell B和Cell D.在数据库中,每个单元都有一个“priority”,表示它的显示顺序。单元格A的优先级为1,B为2,D为3.现在它们将按顺序显示,但是当我想要添加单元格C并将其放在B和D之间时,我首先需要更改单元格D的优先级Cell C位于中间的空间。

我想也许我可以优先考虑默认情况下新的单元格远离相邻单元格,但最终会以与上面相同的方式失败。

另外,我考虑使用不同的优先级字段。我可以在其前面放置单元格的ID号,而不是使用抽象数字来表示顺序。这样,在显示一个单元格之后,我的函数会执行一个select查询来查找“priority”字段等于当前单元格id的单元格并显示它。但问题是如果一个单元格被删除,那么它之后的下一个单元格(因此顺序中的其余单元格)将不再显示。

解决此问题的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

拥有一个采用十进制值的优先级列,并按优先级排序。使用小数,很容易将新项目放在它们所属的位置,而无需更改任何其他内容。

答案 1 :(得分:0)

初​​步:

// $result is what our database query returned. sample data used.
$result = array(
    'name'=>'Leeroy Jenkins',
    'age'=>'28',
    'gender'=>'male',
    'note'=>'At least I\'ve got chicken.'
);

// $data contains all of the current record's information.
// the order of these is irrelevant.
$data[0] = $result['name'];
$data[1] = $result['age'];
$data[2] = $result['gender'];
$data[3] = $result['note'];

// $priority is the order what we want the information displayed in.
// change this to the preferred order using the numerical indexes from above.
// this could even be read from the database, if desired.
$priority = array(2, 1, 0, 3);

// write out our information.
foreach ($priority as $item) {
    echo '<td>' . $data[$item] . '</td>' . PHP_EOL;
}

虽然复制$result中存储的数据可能是浪费资源..正如我所说,基本。

答案 2 :(得分:0)

在我的论坛代码中,我只需添加到最后并为每个单元格提供向上/向下按钮,只需将选定的单元格与其上方或下方的单元格交换即可避免插入之间的问题。