存储和维护物品顺序的最佳方法是什么?

时间:2015-01-21 00:12:32

标签: mysql arrays sorting

我有一张pages的EAV表,其中包含所有网页与其所属books之间的关系。

我需要能够存储和操纵页面的顺序。

现在显而易见的解决方案是保留页面的页面索引。

+---------+---------+------------+
| page_id | book_id | page_index |
+---------+---------+------------+
|       1 |       1 |          1 |
|       2 |       1 |          2 |
|       3 |       1 |          3 |
|       4 |       1 |          4 |
|       5 |       1 |          5 |
|         |         |            |
|       6 |       2 |          1 |
|       7 |       2 |          2 |
|         |         |            |
|       8 |       3 |          1 |
+---------+---------+------------+

但是现在想象你有5000页,你将最后一页移到前面。这意味着你必须将page_index追加到4999行,我想这可能会变重。

我考虑在MySQL中实现一个链表:

+---------+---------+-----------+-----------+
| page_id | book_id | prev_page | next_page |
+---------+---------+-----------+-----------+
|       1 |       1 | NULL      | 2         |
|       2 |       1 | 1         | 3         |
|       3 |       1 | 2         | 4         |
|       4 |       1 | 3         | 5         |
|       5 |       1 | 4         | NULL      |
|         |         |           |           |
|       6 |       2 | NULL      | 7         |
|       7 |       2 | 6         | NULL      |
|         |         |           |           |
|       8 |       3 | NULL      | NULL      |
+---------+---------+-----------+-----------+

如果您移动页面,那么您需要更改的是它自己的行以及您交换的页面行。但是,我还需要同时对多行进行排序(并且它们不必位于"行"(它们可以从任何地方挑选出来并组合成一行),并且支持PHP使用此链表方法实现这一点将比使用简单的page_index实现更复杂。

我还可以在名为books的{​​{1}}表中添加一个列,在该表中我可以存储逗号分隔的页面索引数组,这将更容易维护,因为将使用PHP生成新数组而不是MySQL。但我对此犹豫不决,因为MySQL还没有正式支持。这将更像是一场黑客攻击。

我的问题有更好的解决方案吗?

0 个答案:

没有答案