Php 在数据库中添加时如何避免重复条目

Php 在数据库中添加时如何避免重复条目,php,mysql,database,codeigniter,Php,Mysql,Database,Codeigniter,如何避免在数据库中添加基于日期的重复条目?在这里,我将只更新要停用的旧数据并插入新的重复条目,而不是再次插入重复条目 结构如下 价格表 id date_created Value is_active 1 2019-10-01 1:00:00 25 0 2 2019-10-05 2:00:00 30 0 但是,假设用户再次为Price表添

如何避免在数据库中添加基于日期的重复条目?在这里,我将只更新要停用的旧数据并插入新的重复条目,而不是再次插入重复条目

结构如下
价格表

id        date_created        Value            is_active
1       2019-10-01 1:00:00      25                 0
2       2019-10-05 2:00:00      30                 0

但是,假设用户再次为Price表添加了重复数据,如下所示

2019-10-05 3:00:00

因此,我要做的是更新与用户条目日期相同的旧条目,使其成为
处于活动状态1
,然后插入新条目

有办法做到这一点吗?由于使用循环,在PHP上执行此操作对我来说非常复杂,但我认为MYSQL中有一种方法我无法理解。

如:

如果指定了ON DUPLICATE KEY UPDATE子句和要更新的行 插入将导致唯一索引或主索引中出现重复值 键,则会更新旧行

对于您的情况,我建议您执行以下步骤:

  • 创建一个新列
    date\u time\u created
    as DATETIME
  • 将创建的日期转换为日期,并仅保存日期

    e、 g.
    $date=date('Y-m-d',strotime($yourDateTime))

  • 将创建的日期设置为唯一索引:

    创建在价格上创建的唯一索引日期(创建日期)



必须将在日期中创建的日期转换为日期,并将创建的日期时间转换为日期时间,因为在您的情况下,使日期时间唯一是没有用的,因为您只需要按日期检查值。这也提高了脚本的可读性和维护性。

查询该表,检查该日期是否存在且是否为_actice=1,并使用结果首先更新现有行,然后插入。您可以先尝试获取具有特定日期的条目,然后再更新,否则插入


您还应该将
date\u created
列设置为
UNIQUE

只需比较created date,如果不存在,则执行insert操作。OP告诉您使用MYSQL,而不是PHP。OP告诉您使用MYSQL,而不是PHP。我照您说的做了。它减少了我的代码。谢谢
INSERT INTO Price
(Value, date_created, date_time_created, is_active)
VALUES
('$theValue', '$date', '$dateTime', 1)
ON DUPLICATE KEY UPDATE is_active = 0