案例何时出错

时间:2017-05-07 13:59:38

标签: mysql sql database

这是我的查询

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 

我该如何解决这个问题?或者如何以另一种方式做到这一点?

日期(" Ymd")函数只是用于返回问题日期的PHP函数

感谢

2 个答案:

答案 0 :(得分:1)

ip列上定义唯一约束,然后使用ON DUPLICATE KEY UPDATE

insert into `table` (ip) values ("myup") 
on duplicate key update 
`last_active`=".date("Ymd").",`last_time`=".date("His")."

答案 1 :(得分:1)

我认为你正在尝试这样做:

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_activelast_time在表格中有默认值。
  • 您应该使用数据库时间,而不是用于此目的的应用程序时间(毕竟,不同的客户端可能有不同的时间值)。
  • 您应该将日期/时间值放入单个datetime列,例如last_active_datetime