php - 使用字符串的唯一 int(11) mysql 值

标签 php mysql

我的数据库中有一个列是 int(11),有时我无法将用户名与 ids 数据库相匹配,因为名称略有不同(即 John Doe 而不是乔纳森·多伊)。正常的 id 从 11000 范围开始,所以我想将它们的名称转换为整数并在前面添加 00 或其他内容,这样我就可以触发一个标志供某人查看和更新​​。我知道我可以使用 str_pad 来获取 00,但我似乎无法生成一定数量的数字以使其与名称有些不同。我知道重复的可能性很高,但我不确定我还能对primary/unique列做什么。任何帮助将不胜感激。

使用mt_randstr_pad的示例:

str_pad(mt_rand(100000000,999999999),11,'00',STR_PAD_LEFT);

有人有更好的选择可以使用名称字符串吗?

最佳答案

I have a column in my database that is a int(11)

该列是一个整数。在存储级别,“11”没有任何意义。

想象一下,您有一个很大的用户名表,有人第 40 次尝试输入“John Smith”。你想让我做什么?您希望有人将其与所有其他变体进行比较吗?您想要识别和检查变体拼写,例如“Johnathan”、“Jonathon”、“John”和“Jhon”吗?重大决定,但它们不会影响如何处理需要审核的 ID 号。

要识别需要检查的行,无论出于何种原因,最好将它们的键放入另一个表中。

create table review_sets (
  set_id integer not null,
  set_created timestamp not null default now(),
  rationale varchar(100) not null default 'Duplicate of existing user?',
  primary key (set_id),
  unique (set_created)
);

create table review_ids (
  set_id integer not null,
  user_id integer not null,
  primary key (set_id, user_id),
  foreign key (set_id) references review_sets (set_id),
  foreign key (user_id) references users (user_id)         -- Not shown.
);

列 review_sets.rationale 允许您将拼写问题与延迟付款或网站滥用等问题区分开来。 review_ids 表允许您将 id 限制为几个变体,而不是所有可能的变体。 (但我不确定这有多大用处。)

您可能需要添加用于标识审阅者、审阅完成时间以及该审阅者做出的决定的列。根据您的应用程序,您可能只能在做出决定后删除行。

关于php - 使用字符串的唯一 int(11) mysql 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18456711/

相关文章:

mysql - 数据库中未创建外键字段

php - 将 MySQL 文本字段编码为 UTF-8 文本文件 - 特殊字符问题

php - 哪个更快/更好 : always update table vs hashing and check before update

php - 如何按多列对多维数组进行排序?

php - 用新图像更新现有图像

php - 对对象进行排序,有些应该始终排在第一位

php - Mysqli 更新 UTF8

php - JS Ajax调用PHP并获取ajax调用数据

mysql - rails : Order found objects with a has_and_belongs_to_many relationship

java - 如何获取当前日期之前 30 天的数据。如何从mysql中的 session 和下一个数据( session +30)中获取两个日期一个日期