这是我的问题
CASE
WHEN (SELECT COUNT(*) FROM `table` WHERE `ip`= 'myip' )=1
THEN UPDATE `table`
SET `last_active`=".date("Ymd").",`last_time`=".date("His")."
WHERE `ip`= 'myip';
ELSE (INSERT INTO `table`(ip)
VALUES("myip"));
END
但它不醒。问题应该出在这里
(SELECT COUNT(*) FROM `table` WHERE `ip`= 'myip' )=1
我该如何解决这个问题?或者如何以其他方式做到这一点?
date("Ymd") 函数只是 php 函数,用于返回问题不在于此的日期
谢谢
最佳答案
我认为你正在尝试这样做:
create unique index unq_table_ip on table(ip);
insert into table (ip)
values ('myip')
on duplicate key update last_active = curdate(),
last_time = curtime();
唯一索引(或等效的唯一约束)保证给定的 ip
在表中只出现一次。让数据库为您完成这项工作——这称为维护关系完整性。
注意事项:
- 假设
last_active
和last_time
在表中具有默认值。 - 为此,您应该使用数据库时间,而不是应用程序时间(毕竟,不同的客户端可能有不同的时间值)。
- 您应该将日期/时间值放入单个
datetime
列中,比如last_active_datetime
。
关于mysql - Case WHEN 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43832374/