2013-03-19 71 views
4

由于我的当前项目的一部分,一个URL可能看起来是这样:强制auto_increment跳过某些值?

http://example.com/summary/ab123 

其中最后一部分是正在通过什么是有效base_convert(~,10,64)使用自定义的字母运行后的整数ID。

但是,字母拼写的东西。例如,当ID 1,950,434出现时,URL将是:

http://example.com/summary/shit 

所以...是的。有什么方法可以“保留”形成不受欢迎的词的ID并使AUTO_INCREMENT字段跳过它们?

+1

如果您仅因为示例网址提出了问题,请投下您的评论:p – 2013-03-19 15:36:23

+0

其实我真的认为这是个好问题...... – George 2013-03-19 15:37:10

+0

您是base64编码*只有*才能获得ID的长度下?如果不是,你可能会做错事。 – Jon 2013-03-19 15:43:37

回答

3

虽然您可以通过创建一个检查自动生成的ID的触发器来实现数据库中的某些内容,并且该ID包含在您的排除列表中 - 请删除该行并重试。

但是,这对我来说似乎有些不礼貌......并且使得数据库关心应该超出其范围的事物 - 即转化为脏语言的ID。

相反,我会建议一个完全在数据库之外的解决方案。例如,你可以改变你的自定义字母表来排除所有的元音吗?这样,无论生成的ID是什么,它都不会在URL中拼写出任何令人厌恶的内容。

我可以想出很多你不想在你的URL中使用的单词。如果你试图将不需要的词语列入黑名单,我会说这个可能性非常好,一个更具有异国情调的术语将会通过...所以我认为一个不需要黑名单的方法也适用于这个原因。

+0

这是一个非常好的主意。我会马上执行它。非常感谢你! – 2013-03-19 15:47:04

+0

_“例如,您是否可以更改自定义字母表以排除所有元音?这样,无论生成的ID是什么,它都不会在你的URL中拼写出任何令人厌恶的东西。“_ RTFM,MTHRFCKR,CKCSCKR,... :-) – CBroe 2013-03-19 15:54:32

+0

@CBroe公平点,但删除元音可以防止字面拼写出来,减少了选项的数量。作为奖励,这意味着我可以拥有包含元音的ID别名拼写特定单词的“新奇事物”。 – 2013-03-19 15:57:09

0

可能唯一的方法就是确定最后一个ID是什么(使用LAST_INSERT_ID)。然后确定下一个数字是否是不合需要的数字,执行填充插入,然后立即删除该条目。