【问题标题】:short unique id mixed with custom id与自定义 ID 混合的简短唯一 ID
【发布时间】:2012-08-28 17:10:35
【问题描述】:

我所拥有的是一个带有元素的表格。每个元素都有一个唯一的id和一个唯一的short id,称为short。它看起来例如像下面这样:

id=>short
1 => 1
9 => 9
10=> a
37=> B

等等。短 id 是通过 php 函数生成的。

我现在想做的是让用户设置自己的自定义短。 假设第 38 位用户希望他的短片是“foobar”。简单的解决方案是:

10=> a
37=> B
38=> foobar
39=> D

但是那样我会失去 C 。如果许多用户决定使用自定义的短 id,最终会丢失许多短 id。

所以每个自定义的short都会导致id“太靠前”有什么办法可以解决这个问题吗?在 mysql 或 php 中。

完美的是:

10=> a
37=> B
38=> foobar
39=> C
40=> FUBAR
41=> D

更新:(可能的三排方法)

“使用”行仅在生成短 ID 而不是定制时增加。这样,可以始终使用“已使用”行生成短 ID。例如:

id  |  short  |  used
10  |  a      |  10
37  |  B      |  37
38  |  foobar |  37
39  |  C      |  38
40  |  FUBAR  |  38
41  |  D      |  39

【问题讨论】:

  • 我不明白这个问题。你会丢失旧的短 ID ......然后呢?
  • @arxanas:我的阅读是 OP 希望重用已使用并已发布的短 ID;如果是这样,答案显然在于生成如此短 ID 的代码,而问题中没有给出。需要更多细节。
  • 好吧,我认为接受不能解决问题的答案是相当愚蠢的。我有一个不被接受的应得的,现在已修复。当然,每次尝试我都会给出正面评价。
  • 缩短我正在使用的ID //来自php.net/manual/en/function.base-convert.php,基数为01234567890123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_。是的,我希望有一个可以回收未使用的 ID 的解决方案。
  • @Wurstbro:这是一个公平的观点。如果您过去的问题已经解决,但没有通过任何给出的答案,您可以发布(然后接受)您自己的解决方案。如果这些问题尚未解决,您可以尝试编辑问题以提供更多信息,直到有解决方案。或者,您可以删除社区无法找到解决方案的问题。本网站的目的不是(仅)回答发帖者的问题,而是提供适用于更广泛受众的问题解决方案记录。

标签: php mysql short


【解决方案1】:

应该足够简单。

  1. 使用回收的短 ID 创建一个新表

  2. 创建另一个(序列)表来保存用于短 id 生成的最后一个 id

  3. 当短 id 被自定义替换时,将其插入回收站

  4. 当你需要创建一个新的short id时,先去回收站看看。

    一个。如果您能找到一个项目,请将其用作新的短 id(然后将其删除)

    b.如果 bin 为空,则将序列加一并从中生成一个新的短 id。

更新

这是创建和使用序列表的简单方法:

CREATE TABLE seqname (id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY) ENGINE=MyISAM SELECT 0 AS id;

UPDATE seqname SET id=LAST_INSERT_ID(id+1);

【讨论】:

  • 这个想法看起来不错 :) 如果你现在告诉我如何为你节省一天的表格排序 :)
  • 现在我遇到的问题是,如果有人创建了一个像 A7 这样的自定义名称并且缩短函数创建了该 ID,那么一切都会变得疯狂:D
  • @Wurstbro 也许应该重复步骤 4b 直到疯狂停止:)
猜你喜欢
  • 2011-06-06
  • 1970-01-01
  • 2015-05-06
  • 2011-08-22
  • 2023-03-22
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
  • 2014-07-16
相关资源
最近更新 更多