2017-05-07 106 views
1

這是我的查詢情況下,當錯誤

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 

我怎樣才能解決這個問題?或者如何以另一種方式做到這一點?

功能僅僅是PHP函數從該

感謝返回日期的問題,心不是

+1

查詢以'SELECT'(或者'UPDATE'或'DELETE'或'REPLACE')開頭。顯示完整的查詢或說明您要做什麼。 –

回答

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
1

ip列定義唯一約束,然後將日期(「年月日」)使用ON DUPLICATE KEY UPDATE

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