gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 18:14:54 26 4
gpt4 key购买 nike

所以我正在尝试制作一个 View 计数器,我的表格看起来像这样。

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

此时我很迷茫,我知道这样做是错误的,但我不知道该怎么做。

所以目前我用 count(post_id) 调用 View ,它给了我 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;

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

附注: 这个想法是每个 ip 都有一个 View 。

最佳答案

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

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

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

您需要在 (post_id, view_ip) 上有一个 uniq 索引,才能发生 DUPLICATE KEY

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

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

view_ip = ?

结束:

view_ip = "'.$ip.'"

另外,第二个很容易发生 SQL 注入(inject)。

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

关于Mysql:在某些重复列上插入所有重复更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47109377/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com