如何使用查询结果更新我的数据库表
Posted
技术标签:
【中文标题】如何使用查询结果更新我的数据库表【英文标题】:How can I update my database table with the result of my query 【发布时间】:2021-10-25 15:57:20 【问题描述】:我是一名法国设计师,我遇到了一个 SQL 问题。我的 mysql 服务器在 v5.6 中,我寻求帮助,因为我有语法问题。我想你可以给我一个解决方案。
我有一个名为“分数”的数据库:
id | pseudo | tempsstage1mili | rangstage1 |
---|---|---|---|
1 | pseudo1 | 20100 | --- |
2 | pseudo2 | 16900 | --- |
我向 MySQL 提出这个问题:
SELECT pseudo,
@curRank := @curRank + 1 AS rank
FROM scores p, (SELECT @curRank := 0) r
ORDER BY tempsstage1mili;
使用这个命令,MySQL 会返回这个:
pseudo | rank |
---|---|
pseudo2 | 1 |
pseudo1 | 2 |
在这一步它是完美的,但现在,我想用结果更新我的名为“scores”的表。我必须更新的列称为“rangstage1”,列“rank”
我想得到那个:
id | pseudo | tempsstage1mili | rangstage1 |
---|---|---|---|
1 | pseudo1 | 20100 | 2 |
2 | pseudo2 | 16900 | 1 |
你能帮我吗?请 ?你是希望!
谢谢!
【问题讨论】:
你要更新什么,哪些字段有哪些值,你能提供预期的结果吗? 感谢您的帮助,我在问题中添加了这个。 您的查询SELECT pseudo, @curRank := @curRank + 1 AS rank FROM scores p, (SELECT @curRank := 0) r ORDER BY tempsstage1mili;
返回pseudo1 | 1 和伪 1 | 2.
不是真的,查询返回:伪2 | (rank) 1 /// 伪 1 | (排名)2
我确实将您的两个查询合二为一,请尝试告诉我它是否有效
【参考方案1】:
你可以把它变成update
:
SET @curRank = 0;
UPDATE scores
SET rankstage1 = (@curRank := @curRank + 1)
ORDER BY tempsstage1mili;
【讨论】:
是的!这个解决方案效果很好!感谢您关注我的问题。你对我的项目帮助很大。 你好,戈登。我现在想将您的解决方案转换为将其插入 php 文件中。我承认我一个人做的不够好。你能帮我吗?【参考方案2】:经过一些尝试,我认为这会有所帮助:
UPDATE scores s
INNER JOIN
( select i.pseudo, i.rank from (SELECT pseudo,
@curRank := @curRank + 1 AS rank
FROM scores p, (SELECT @curRank := 0) r
ORDER BY tempsstage1mili ) i ) a
ON s.pseudo = a.pseudo
SET s.rangstage1 = a.rank ;
请尝试给我反馈,它有效吗?
【讨论】:
下午好 basha04,感谢您关注我的问题。您的解决方案有效,但 Gordon Linoff 的下一个解决方案更短。我会用这个。再次感谢您。 @QuiVoleUnOeuf 很高兴您找到了解决方案。我尝试了两个将两个查询合二为一,这就是它更长的原因。乐于助人 你好 basha04。我刚刚将您的解决方案插入到一个控制数据库的 PHP 文件中,它运行良好。再次感谢您。 @QuiVoleUnOeuf,您可以为可能遇到相同问题的其他人投票以上是关于如何使用查询结果更新我的数据库表的主要内容,如果未能解决你的问题,请参考以下文章