【问题标题】:How to make a pair of columns unique in mysql [duplicate]如何使一对列在mysql中唯一[重复]
【发布时间】:2016-07-02 08:45:35
【问题描述】:
+----+---------------+-------+---------------+
| id |     name      | phone |    ip_addr    |
+----+---------------+-------+---------------+
|  1 | customname001 |  1234 | 192.168.100.1 |
|  2 | customname002 |  2156 | 192.168.100.2 |
|  3 | customname003 |  9685 | 192.168.100.3 |
|  4 | customname004 |  1546 | 192.168.100.1 |
|  5 | customname005 |  1234 | 192.168.100.1 |
+----+---------------+-------+---------------+

在我的 codeigniter 项目中,我正在尝试构建一个模型,该模型将帮助我将新行插入到类似于上面的表中。我要在这里应用的条件是检查姓名、电话和 ip_addr 的组合是否唯一。

我知道,对于单个列,如果我们将值设置为唯一,则这些值不能重复,但我的示例是另一种情况,我希望所有列(id 除外)的组合都是唯一的.

任何人都可以在这里帮助我构建模型,这将帮助我添加一对新的姓名、电话和 ip_addr 并检查这对是否已经存在并相应地给出反馈。

【问题讨论】:

  • 为什么不检查这些值是否已经存在?

标签: php mysql codeigniter


【解决方案1】:
insert into table (name, phone, ip_addr)
select new.name, new.phone, new.ip_addr
from table
where (new.name,new.phone,new.ip_addr) not in (
    select name,phone,ip_addr from table
);

【讨论】:

    【解决方案2】:

    如果您有用户要在其中输入姓名、电话和 ip_address 的视图 您可以设置表单验证规则,轻松防止记录重复!

    所以,为每个字段设置规则 is_unique is_unique[tbl_name.column_name]

    例如:

    $this->form_validation->set_rules('name', 'User Name', 'required|trim|xss_clean|is_unique[users.name]);
    

    注意:这仅在您应该从视图中输入值时才有用,否则您必须使用 SQl 查询进行检查

    【讨论】:

    • 但这只会将一列设置为唯一的。但我正在寻找的是如何将列组合设置为唯一。我认为,这是不可能的,可能我必须编写 sql 查询。
    • 不,您可以为任意数量的列设置验证!!为此,您将为每个需要的字段或其他内容设置验证规则...所以也对该字段执行相同的操作.@KiranKumarDash
    【解决方案3】:
    ALTER TABLE `table` ADD UNIQUE `unique_index`(`name`, `phone`, `ip_addr`);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-05
      • 2014-01-12
      • 2019-02-27
      • 1970-01-01
      • 1970-01-01
      • 2013-08-10
      • 2014-11-22
      • 2021-11-09
      相关资源
      最近更新 更多