我有一个数据库表,用于记录每个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 |
+----+---------+---------+--------+
答案 0 :(得分:1)
您是否在桌面上定义了一个唯一的密钥?对于你想要的,我认为它是:
create unique index admin_sites_userid_siteid on admin_sites(user_id, site_id);
然后使用它来定义插入与现有行匹配的时间。