php - 如何在mysql中存储顺序数据

标签 php mysql sql database database-design

我得到了一些锻炼程序的内容,这些内容将按顺序显示给用户。下面显示了一个最简单形式的示例。

id  name        duration    completed
----------------------------------------
1   jumping     10          1
2   running     15          0
3   cycling     12          0
4   push ups    30          1

通常表格至少有 100 行/练习,大约有 300 个表格(不同标准的不同练习)。我们没有任何前端,直接使用 dbForge Studio 数据库编辑器更新数据库。

之前的开发人员设计了表格,因此唯一 id 列也用作序列号。它也是 url 的一部分。例如。 xxx/exercise/12 专门查找数据库中 id=12 的实际第 12 行(他假设所有 id 都以 1 递增并且按顺序排列),而不是 id=12 的行。

明显的问题是,当我们想在表中添加一个练习时,比如说在 练习 5 之后,我们在 5 之后手动添加它,然后必须手动更新以下所有的 ID练习,使它们按顺序排列。理想情况下,我们应该只在表中添加一行,然后以某种方式解释 php 代码知道这个练习应该出现在练习 5 之后。 p>

同样,例如,如果我们删除编号为 17 的练习,则不会提供来自 url xxx/exercise/17 的内容。理想情况下,id=18 现在按顺序位于第 17 位,因此必须提供该内容。

尝试

我考虑过添加另一个列序列,以告知按什么顺序提供服务。但话又说回来,我又回到了方 block 1,因为我必须在添加/删除时更新序列号。

我还考虑过创建另一个表并以我们想要提供内容的任何顺序存储 ID 号。 - 但我不确定这是否真的是个好主意。


谁能指导我为这个问题设计合适的数据库/表?

编辑

我想我的问题没有说清楚。
我不想重新装满/重新订购 key 。我知道那不是应该设计数据库的方式。
但问题是,如果我在表的末尾添加一个内容,那么我如何告诉表/php 我想提供新添加的内容(id 可以说是 127)在 id=15 之后而不是最后服务。

最佳答案

关于“我还考虑过创建另一个表并以我们想要的任何顺序存储 ID 号来提供内容。-但我不确定这是否真的是个好主意。”

这不是一个好主意,而是一个绝妙的主意。这是骨架设计。它并不完美,但可以帮助您入门。

表练习 - ExerciseID、NameOfExercise、MeasuredIn,以及您可能需要的其他字段,. NameOfExercise 的示例值是俯卧撑(以重复次数为单位)和 RunningOnTheSpot(以秒为单位)。

表例程 - RoutineId、NameOfRoutine 以及您可能需要的其他字段。示例值是 Jane Fonda 的日常事件、海豹突击队的日常事件和老屁的日常事件。

最后,表格ExerciseRoutine。这是一个多对多的关系。一个练习可以不止一个例程,一个例程可以有多个练习。字段可以是 ExerciseID、RoutineID、Sequence、MeasuredInMultipler 以及您可能需要的其他字段。

这是一些示例数据。

ExerciseId, NameOfExercise,       MeasuredIn
1           Push Ups              repetitions
2           Running on the Spot   seconds
3           Jumping Jacks         repetitions

RoutineId, NameOfRoutine
1          Jane Fonda
2          Navy Seal

最后

 RoutineID, ExerciseID, Sequence, MeasuredInMultipler
 1          2           1         60
 1          3           2         10
 2          1           1         500
 2          3           2         100

所以 Jane Fonda 的套路是原地跑 60 秒,然后是 10 次开合跳。与此同时,海军海豹突击队的日常事件是 500 次俯卧撑,然后是 100 次开合跳

这种方法允许您拥有许多例程,所有例程都相互独立。

关于php - 如何在mysql中存储顺序数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23463587/

相关文章:

sql - 检测保存在 SQLite 表中的\n 字符?

sql - 在 T-SQL 中,如何整理积极和消极的操作以使其发生?

php - 检查选择查询的结果然后与当前值比较如果可用则不应插入

javascript - Pusher 以 > 200ms 减慢 ajax 请求

php - 使用新值更新联结表

mysql - 更新多个表中的主键和外键

mysql - 使用 INNER JOIN 有什么好处?

mysql - 兼容 mysql 插入的 Perl 格式数组元素

mysql - 删除重复的条目,同时保留一个

php - 如何在 CentOS 5.3 上安装 php-mongodb?