插入时重复记录

时间:2014-05-10 00:01:24

标签: mysql primary-key unique-key unique-index

我有一个数据库表,用于记录每个user_id使用的site_id。我每次保存设置时都会收到重复项。我想要它所以我可以在表中查询user_id = 99并查看哪个site_id与该user_id相关联。

SQL:

  $sql = "INSERT INTO user_sites (rooftop_id, site_id, created_at, active)
                VALUES ('$rooftop_id','$key', now(), '$value')
                ON DUPLICATE KEY
                UPDATE updated_at = IF(active=VALUES(active),updated_at,NOW()),
                active = VALUES(active)
               ";

当前输出:

+----+---------+---------+--------+
| id | user_id | site_id | active |
+----+---------+---------+--------+
|  1 |      99 |      30 |      1 |
|  2 |      99 |      20 |      1 |
|  3 |      99 |      40 |      1 |
|  4 |      32 |      30 |      1 |
|  5 |      32 |      20 |      1 |
|  6 |      32 |      40 |      1 |
|  7 |      32 |      30 |      0 |
|  8 |      32 |      20 |      0 |
|  9 |      32 |      40 |      0 |
+----+---------+---------+--------+

期望的输出:

+----+---------+---------+--------+
| id | user_id | site_id | active |
+----+---------+---------+--------+
|  1 |      99 |      30 |      1 |
|  2 |      99 |      20 |      1 |
|  3 |      99 |      40 |      1 |
|  4 |      32 |      30 |      0 |
|  5 |      32 |      20 |      0 |
|  6 |      32 |      40 |      0 |
+----+---------+---------+--------+

1 个答案:

答案 0 :(得分:1)

您是否在桌面上定义了一个唯一的密钥?对于你想要的,我认为它是:

create unique index admin_sites_userid_siteid on admin_sites(user_id, site_id);

然后使用它来定义插入与现有行匹配的时间。