![]() |
1
33
只需访问数据库一次,就可以立即获取所有内容,这很可能是最大的瓶颈。
然后将结果放入一个数组中(比如
我们使用
等等,这将导致问题
为什么我们不计算结果和+1?这是因为,如果你有多个结果,并删除了一些,你的下一个鼻涕虫很可能会发生冲突。 例如。
删除-3和-5留给我们
因此,这给了我们3个结果,下一个插入将是
为什么我们不直接使用
|
|
2
15
只需使用一个查询即可为您完成所有繁重的工作。。。
|
![]() |
3
3
您只需选择数量最大的段塞,然后将其增加1:
此查询将选择具有
之后,您可以解析结果,得到数字并增加它。 在这种情况下,您将只有一个查询和许多未使用的性能。 更新
这行不通,因为
更新2 查询也可以按长度排序,它将正常工作。感谢Jack:
更新3 还增加了对原始段塞的检查。多亏了海伍德。
|
![]() |
4
2
你为什么不创建一个slug,然后把剩下的涉及到MySQL索引的工作留下来呢。这是一个
MySQL部分可以用 trigger (更改表名和列名)。
|
![]() |
5
1
对于一个部分,我会创建一个对象,处理创建段塞和处理数字的部分:
输出:
对于数据库的另一部分,这已经大大简化了您的代码(请仔细检查,我很快就完成了)。还可以看看如何从您实际拥有的Mysqli对象中获益(但不要按原样使用):
但正如其他人已经写的那样,你应该首先从数据库中一次获得所有编号的slug,然后在必要时选择一个唯一的slug。这将减少数据库调用的次数。此外,代码更加紧凑:
|
![]() |
6
1
我对答案并不完全满意,所以我想出了一个稍微不同的方法。
这基本上是这样做的,它检查DB中所有与新段塞相似的现有值,并将其与行号匹配以检查间隙,如果没有找到,它将使用第一个相同的段塞生成的最大值,该段塞被推到最后(注意:我们将
|
|
7
0
您应该能够在使用LIKE关键字的单个数据库调用中做到这一点,这将减少执行时间。 |
![]() |
8
0
你可以使用 Fbeen/UniqueSlugBundle 。这个捆绑包很轻,可以做它需要做的事情。 |
![]() |
Karlo · PHP Sqlite PDO最新版本 5 月前 |
![]() |
Malte · 检查远程服务器上是否存在文件(使用PHP)[关闭] 5 月前 |
![]() |
Bard.Mus · 迁移后的数据库字符集环境 5 月前 |