1

我有一个项目的密钥,我在该项目中尝试测试许可系统(只是为了好玩和学习),我认为我会遇到的一个部分是如何分发密钥。我在数据库中有大约 100 个密钥,我正在尝试找出分发它们的最佳方法。数据库布局如下,

ID (Auto Increment) | key

使用 PDO 库,按 ID 按时间顺序排列的最有效方法是什么?但是即使我按时间顺序,当我删除了分发的密钥时,我将如何按时间顺序?或者可能是随机的身份证号码?我不知道如何以最有效的方式分发这些密钥?

4

2 回答 2

2

如果我正确理解你的问题...

您可以通过 PDO 尝试此查询:

SELECT * FROM `table-name`
ORDER BY `ID` ASC

然后,当您从执行的返回单步执行 while() 循环中的行时,它将按照您所要求的时间顺序排列。

至于丢失 ID,例如如果您删除 ID #10 的键,您的表将在返回的行 ID 中从 9 跳转到 11。添加新密钥时,除非您在插入时明确指定该 ID,否则不会使用 #10。

编辑:从你的问题的措辞来看,听起来你可能会担心你如何为钥匙设置 ID。也许你已经明白这一点,但是由于你有 Auto Increment,当你插入新的 key 时,你的 ID 会自动生成,所以一个新的 key 将被分配一个 ID 为(最后插入的 key 的 ID)+1。

于 2013-01-04T01:23:07.927 回答
1

年表不完全是 PDO 的功能,或者就此而言,您使用的任何数据库驱动程序......它更多的是您的架构问题。

通常,任何数据库结构中常用的字段是“时间戳”或“创建”字段,它保存记录在数据库中创建的时间。这些字段可以是 MySQL 数据类型TIMESTAMP(在这种情况下,驱动程序将返回自 Unix 纪元以来的秒数),或者DATETIME(在这种情况下,大多数驱动程序将尝试返回语言的本地 DateTime 对象,如果存在的话。)即使单调递增的主键意味着排序时一定数量的时间顺序,时间戳字段可以记录在服务器上创建记录的确切时间,以及使用ON UPDATE CURRENT_TIMESTAMP. 因此,我建议将其添加到您的架构中。

使用数据库中的此类字段,您始终可以使用以下方式对查询进行排序:

SORT BY timestamp_field_name ASC

此外,如果通过“分发”您的意思是某些数据可以通过使用此键作为某种查询参数来公开访问,那么出于您描述的确切原因,我不会使用单调主键,特别是如果这是“许可”概念证明,如果您的意思是 DRM 类型的东西可能应该产生一个复杂的字符串。字段中的哈希时间戳UNIQUE或 phpuniqid函数可以生成可以存储在具有键约束的VARCHAR数据库字段中的值。UNIQUE这是如果我理解你描述的目标。

于 2013-01-04T01:24:06.703 回答