Mysql:在所有重复更新上的一些重复列插入

NFSpeedy

所以我试图制作一个视图计数器,我的桌子看起来像这样。

post_id  |  view_count  |  view_ip
----------------------------------
20       |           1  |  some ip
21       |           1  |  some ip

在这一点上,我非常迷茫,我知道这样做是错误的,但我不知道该怎么做。

所以目前我正在用 count(post_id) 调用视图,它给了我 1 但是当我用我的手机(不是在 wifi 上)打开网站时,我希望有第二行 post_id = 20 但重复激活和我不是在做新的插入...

这是我的查询:

INSERT IGNORE INTO `views`
SET view_count=1, post_id = '.$article['post_id'].', view_ip = "'.$ip.'"
ON DUPLICATE KEY UPDATE view_count=view_count;

堆栈中的某个地方有一个如何跳过更新的答案,这是推荐的,但我不确定这是否可以...

PS:这个想法是每个 ip 有一个视图。

朱利安·帕拉德

从语义上讲,您试图表达“为这篇文章插入一个新视图,但如果它已经有一个视图,请添加一个”。

这可以通过以下方式完成:

INSERT INTO `views` (post_id, view_count, view_ip)
VALUES (?, 1, ?)
ON DUPLICATE KEY UPDATE view_count = view_count + 1;

你需要在uniq的指数(post_id, view_ip)DUPLICATE KEY情况发生。

哦,拜托,请不要连接字符串来伪造 SQL 查询,这是SQL 注入的方法请使用准备好的语句,准备好的语句提供了非常干净的(视觉上和技术上)方式来将值放入语句中,并且它在服务器端非常安全。

当我说它“视觉上干净”时,我的意思是我更喜欢:

view_ip = ?

超过:

view_ip = "'.$ip.'"

另外,第二个很容易受到 SQL 注入。

?占位符可能因系统而异)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MySQL根据一些匹配的字段查找重复项,有些则不

选择所有列,但忽略其中一些具有重复值的记录

重塑数据框的形状,以便在所有其他列上重复列的每个条目

熊猫:对于特定列中的所有重复条目,请获取一些信息

重复键上插入/更新的MySQL错误

需要一些帮助来清除 MySQL 表中没有约束的重复项

更新重复列的位置

在所有行中重复一行 oracle

在重复键更新上插入总是更新所有值

重复打印一些字符

Give命令删除重复的行,但是重复的行在.txt文件中有一些变化

浏览所有文档并批量更新其中的一些

计算一行的重复列,打印所有行及其计数

如何从一个mySQL innodb表中选择/联接一些数据到另一个(没有重复项),并选择每个ID的最后插入的行

mysql在重复的密钥更新上插入,检查发生了哪一个

Perl在所有子类中导入一些模块

在所有事件引发(或合并事件)之后,C#会做一些工作

MySQL在非主密钥的重复更新上插入

查找数据框集合中的所有重复列

MySql 使用不同的值更新重复列的列

更新表中的一个重复列

Mysql:全选不重复列

删除只有一列的重复值从 sql 查询中重复列的所有可用列中获得所有值

如何查找带有一些没有重复值的键的文档?

我有一个对象数组,在所有对象中我都删除了一些数据

如何设置对角线的值并在所有行上重复?

HTML5 Canvas-在所有画布大小上重复文本

AureliaJS 应用程序在所有浏览器选项卡上重复

mysql根据重复设置和时间删除一些条目