首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -如果已经存在,则生成行和更新

MySQL -如果已经存在,则生成行和更新
EN

Stack Overflow用户
提问于 2015-01-28 19:54:57
回答 4查看 1.7K关注 0票数 1

我有4列的表:Date, John, Frank, Anthony

我想做一个表格,可以由这三个人每天填写,并将这些值存储在数据库中。当John今天填写表单时,应该用日期来创建一个新行,并在数据库中使用他的值。当Frank在1小时后(所以是同一天)填写表单时,他的值也应该插入到数据库中,但应该插入到同一行中,因为现在已经有一行的日期了。但是当Anthony明天填写表单时,我应该用明天的日期创建一个新的行。

因此,简而言之:程序检查是否有人已经填写了今天的表格。如果是的话:它只是在填写者的列中将现有行的值相加。如果没有,它将与今天的日期划清新的界限。

我已经编写了这段代码,但问题是,每次有人填写表单时,它都会生成一个新行,而且只有在$person是当天第一个填写表单的时候才应该创建一行。

代码语言:javascript
复制
$sql = "INSERT INTO table (Date, $name) VALUES (CURDATE(),'$values')"; 
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-01-28 20:07:24

首先,确保Date字段是主键或唯一键。那么您可以使用关于重复密钥更新

代码语言:javascript
复制
$sql = "INSERT INTO table (Date, $name) VALUES (CURDATE(),'$values') 
        ON DUPLICATE KEY UPDATE $name='$values'"; 

但是,您确实应该检查您的语言中准备好的语句(在PHP情况下是PDO),以防止SQL注入。

票数 3
EN

Stack Overflow用户

发布于 2015-01-28 20:16:40

你应该换个桌子。

不要为每个人创建一个列,而是创建一个name列,这样您就可以:

日期_

将日期和人作为主键:

代码语言:javascript
复制
ALTER TABLE 'table' ADD PRIMARY KEY (Date,Name)

然后插入如下:

代码语言:javascript
复制
INSERT INTO table (Date,Name,Values) VALUES (CURDATE(),'$name','$values') ON DUPLICATE KEY UPDATE Values='$values'
票数 3
EN

Stack Overflow用户

发布于 2015-01-28 19:58:34

尝试使用替换INTO而不是INSERT INTO。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28201204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档