mysql - Case WHEN 错误

标签 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 

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

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

关于mysql - Case WHEN 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43832374/

相关文章:

mysql - 如果语句为 1,则运行特定的 SQL 语句

SQL - 创建表时,如何在另一列满足特定要求时使其成为必需列?

mysql - 在 Multi-Tenancy 的情况下如何将数据库副本复制到自身

database - 构建其中一行必须映射到另一个表中的多行的数据库的最佳方法?

MySQL 从特定表中选择列

php - JQUERY Bootgrid 表列表的 mysql 查询中的印度货币格式

php - 我创建了 3 个表 users、meeting 和 request 如何获取请求 session 的用户?

Java:在 SQL 数据库中对事件执行某些操作?

php - 如何在两个不同表的两行中插入相同的UUID

SQLite3 API 的 C++ 包装器 - sqlite3pp 的替代品