【问题标题】:PHP Table Unique KeysPHP 表唯一键
【发布时间】:2013-01-10 15:46:05
【问题描述】:

我有 3 张桌子。

第一个表是 USERS, 第二个表是产品密钥, 第三个表是 PRODUCT KEY 和 USER 的连接。

看起来像这样:

CREATE TABLE product_keys
(
id INT auto_increment PRIMARY KEY,
product_key VARCHAR(255)
);

CREATE TABLE users
(
id INT auto_increment PRIMARY KEY,
username VARCHAR(50),
email VARCHAR(50)
);

CREATE TABLE user_keys
(
id INT auto_increment PRIMARY KEY,
product_key VARCHAR(255) UNIQUE,
user_id INT
);

示例:产品密钥表有 70 个密钥。 如果第一个用户注册,他将收到一封包含产品密钥的电子邮件。然后将第一个用户 ID 和该产品密钥保存到第三个表中。

问题是如何使已发送的产品密钥不再发送,而是在第二个用户注册时发送下一个。

【问题讨论】:

  • 嗨,yafa,编辑了你的问题,因为你使用了不正确的术语“数据库”而不是“表”,这就是你的意思
  • 您如何制作产品密钥? uniqid() 每次生成不同的字符串
  • 不,那些产品密钥将由某人提供,我必须将它们保存到数据库表密钥中。
  • @YafaSu 我不确定你想要达到什么目的。你想要每个用户唯一的 product_key 吗?您的users 表具有product_keys 并且表product_keys 具有用户详细信息是否有特定原因。还是错字
  • @YafaSu 您可以通过在users 表本身中为product_key 添加唯一键列来处理此问题。这样你的应用程序会更快。您需要维护的表格更少

标签: php database unique


【解决方案1】:

在第三张表中再增加一列used,默认值为0。之后,当你使用key时,将其改为1。

当您选择要分配给用户的键时,仅选择带有used=0 的键。

【讨论】:

  • 应该放入user_keys表还是pruduct_key表?
  • product_key 表中使用它。 (抱歉回复晚了)
【解决方案2】:

你的问题很不清楚。您需要注册 100 个用户但只有 70 个密钥?那么,第 71 位用户不可能获得唯一的。

否则,您可以使用uniqid() 来生成这些键,每次调用它都应该返回一个唯一的字符串

编辑:所以您只需要知道密钥表中的哪些密钥已被使用?要么在其中放置一个新列(类似于“已使用”),每次将其分配给用户时将其设置为 true(还允许您轻松获取未使用的产品密钥),或者您可以简单地删除记录使用表中的键

【讨论】:

  • 很抱歉,70 名注册者中的第一个将获得钥匙。只是不知道如何解决,就像第一个键是发送一样。那么该密钥不应该再次发送。
  • 我刚才编辑了我的答案,只是添加一个新列来标识使用过的密钥或每次使用时删除一个密钥
  • 谢谢,我试试看。
猜你喜欢
  • 2021-08-26
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-09
  • 1970-01-01
相关资源
最近更新 更多