我一直在阅读关于这个主题的其他问题,但似乎无法得到我想要做的工作。
这是我的疑问:
INSERT INTO entries
(
num_entries,
m_d_y,
last_entry
)
VALUES
(
1,
'01_24_2014',
UNIX_TIMESTAMP()
)
ON DUPLICATE KEY UPDATE num_entries = (num_entries + 1), last_entry = UNIX_TIMESTAMP()
该查询有效,但我想添加一个条件,UPDATE
仅在{1}}超过一秒前执行。
我尝试添加last_entry
子句,但由于WHERE
语句没有INSERT
子句,因此无效。
有没有办法在我的查询中添加某种WHERE
条件?
我试图这样做的原因是,在我的PHP代码中,我正在检查查询是否影响了任何行。我的目标是:
答案 0 :(得分:1)
像这个人为的例子一样进行INSERT SELECT:
INSERT INTO entries (col names)
Select 1, '01_24_2014', UNIX_TIMESTAMP() WHERE critera
ON DUPLICATE KeY UPDATE ...
MySQL参考文献是here。
答案 1 :(得分:1)
您是否只能使用您正在使用的脚本语言更改查询? last_entry
来自该语言(或现在来自UNIX_TIMESTAMP()
),因此您可以添加或省略ON DUPLICATE KEY UPDATE
部分:
query = "INSERT INTO ...."
if less than a second ago:
query += "ON DUPLICATE KEY UPDATE ...."
右?
或者您的意思是现有的last_entry
必须是> 1秒钟?那可能更容易?:
ON DUPLICATE KEY UPDATE
num_entries = IF(last_entry-1 < UNIX_TIMESTAMP(), num_entries + 1, num_entries),
last_entry = IF(last_entry-1 < UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), last_entry)
或类似的东西? =)
(这是完全未经测试的。)