我有一张用于统计观看次数的表格:
post_views table
___________________________________
| | | |
| id | post_id | views |
|________|_____________|___________|
post_id
与id
表的posts
相关的地方:
posts table
__________________________________________
| | | | |
| id | title | text | .. |
|________|___________|__________|_________|
id
中的每个posts
在post_views
表中应该有一行,因此id
在视图表中是主要的,而post_id
是唯一的。 / p>
如果存在views
,我想增加post_id
的数量,否则插入新的post_id
。
所以我正在使用该查询:
INSERT INTO post_views (`post_id`, `views`) VALUES (1, 1) ON DUPLICATE KEY UPDATE `views` = `views`+1
这创建了id
= 0的新行:
____________________________________
| | | |
| id | post_id | views |
|__________|_____________|___________|
| | | |
| 0 | 1 | 1 |
| | | |
|__________|_____________|___________|
每当我使用新的post_id
运行相同的查询时:
INSERT INTO post_views (`post_id`, `views`) VALUES (2, 1) ON DUPLICATE KEY UPDATE `views` = `views`+1
现有同一行中的视图增加,并且未添加新的post_id
:
____________________________________
| | | |
| id | post_id | views |
|__________|_____________|___________|
| | | |
| 0 | 1 | 2 |
| | | |
|__________|_____________|___________|
答案 0 :(得分:1)
您尚未声明id
为auto_increment
。您的表声明应类似于:
create table post_views (
id int auto_increment primary key,
post_id int not null,
. . .
);
当您将id
留在插入内容之外时,它将获得默认值。对于auto_increment
,默认值为递增的id
。
您可能已指定id
为not null
(或primary key
),默认值为0
。所有插入均如此,因此所有尝试插入的值均相同。 auto_increment
应该可以解决此问题。