INSERT INTO没有多少工作...在DUPLICATE KEY UPDATE查询中,所以请引导我找到解决方案。
数据库表名为'tb_logs'
,有4列:
log_user_id, log_visitor_id, log_date, log_counter
我想插入数据,只更新log_date
和log_counter
,如果已经存在行log_user_id AND log_visitor_id
,其中包含我要插入的完全相同的值。
无论我尝试过什么,都无法使其正常工作,它会更新不应更新的行,或添加不应添加的新行。
我最近的代码:
$sql = "
INSERT INTO tb_logs (
log_user_id,
log_visitor_id,
log_date,
log_counter
) VALUES (
'{$user}',
'{$visitor}',
UNIX_TIMESTAMP(CURRENT_TIMESTAMP),
'1'
) ON DUPLICATE KEY UPDATE
log_user_id='{$user}',
log_visitor_id='{$visitor}',
log_date=UNIX_TIMESTAMP(CURRENT_TIMESTAMP),
log_counter=log_counter+1
";
也许我还没有正确理解ON DUPLICATE KEY UPDATE查询?
示例:
log_user_id log_visitor_id log_date log_counter
--------------------------------------------------------
1 5 23434234 1
现在再次log_user_id=1
AND log_visitor_id=5
,然后不要插入新行,只需更新log_date
和log_counter
这可能吗?
答案 0 :(得分:1)
U应该有一个UNIQUE复合键(log_user_id,log_visitor_id)
ALTER TABLE `tb_logs` ADD UNIQUE (
`log_user_id` ,
`log_visitor_id`
);
然后
$sql = "
INSERT INTO tb_logs (
log_user_id,
log_visitor_id,
log_date,
log_counter
) VALUES (
'{$user}',
'{$visitor}',
UNIX_TIMESTAMP(CURRENT_TIMESTAMP),
'1'
) ON DUPLICATE KEY UPDATE
log_date=VALUES(log_date),
log_counter=log_counter+VALUES(log_counter)
";
答案 1 :(得分:1)
是的,首先创建一个唯一索引。
ALTER TABLE `tb_logs`
ADD UNIQUE INDEX `user and visitor id` (`log_user_id`, `log_visitor_id`) USING BTREE;
然后按照您的方式构建查询;
INSERT INTO tb_logs (
log_user_id,
log_visitor_id,
log_date,
log_counter
)
VALUES
('{$user}',
'{$visitor}',
UNIX_TIMESTAMP(CURRENT_TIMESTAMP),
'1')
ON DUPLICATE KEY
UPDATE log_counter = log_counter + 1, log_date = UNIX_TIMESTAMP(CURRENT_TIMESTAMP)