Joh*_*ohn 3 mysql sql insert-into
在我的表中,我有两个字段:v_id和ip_address.我想仅在IP地址尚不存在时才将一些数据插入此表.
谷歌之后我遇到了INSERT IGNORE INTO声明,这是我的代码:
public function update_visits($ip_address)
{
$sql = 'INSERT IGNORE INTO `24h_visits` (ip_address) VALUES (?)';
if($this->db->query($sql, array($ip_address)))
{
return TRUE;
}
return FALSE;
}
Run Code Online (Sandbox Code Playgroud)
它运行正常且没有错误,但是仍然会生成重复的行,即使将相同的IP作为参数传入也是如此.
有人知道吗?谢谢.
你必须创建一个UNIQUE关于指数ip_address的INSERT IGNORE工作:
ALTER TABLE 24h_visits
ADD UNIQUE INDEX(ip_address)
Run Code Online (Sandbox Code Playgroud)
但是,我还没有看到您的架构的全部内容,但我认为有一个列存储上次访问的时间戳.这是唯一有意义的方法(因此您可以不时地清除超过24小时的访问次数).
在这种情况下,你实际上并不想要INSERT IGNORE,INSERT ... ON DUPLICATE KEY UPDATE而是.假设你有一个名为last_visit:
INSERT INTO 24h_visits (ip_address, last_visit)
VALUES ('$ip_address', NOW())
ON DUPLICATE KEY UPDATE last_visit = NOW();
Run Code Online (Sandbox Code Playgroud)
使用时INSERT IGNORE,永远不会插入新行,因此您将始终拥有第一个插入的值last_visit,这(我看到的方式)并不完全正确.
| 归档时间: |
|
| 查看次数: |
1527 次 |
| 最近记录: |