由于这很复杂,我将举例说明我正在尝试的内容:
在第一个表格用户数据中,我有用户和他们保存的游戏文件(保存文件)。每个用户可以与多个保存的游戏文件相关联。 第二个表是服务器上所有已保存游戏文件的分数。每个保存文件都有一行,保存游戏时还有时间戳,此时得分和游戏的标题。
现在说我想将每个游戏标题的所有用户最新文件重置为零分。这意味着我需要UPDATE Scores SET score=0 WHERE user=x AND title=y AND timestamp = (SELECT max(timestamp) FROM Scores where user=x and title=y);
。
但是,我不确定如何使用用户直接在分数表中执行此操作。由于用户数据和分数表由唯一的保存文件连接,但我知道应该有办法执行此操作。另外,如果有人可以向我推荐处理此迭代的最佳方法,以便语句对所有用户,标题对执行,那将会有所帮助!
后勤 - 通过mysqldb使用SQL和Python。
谢谢!
答案 0 :(得分:1)
这是一个SQL唯一的解决方案,希望它有所帮助。 您可能需要稍微解决这个问题,但以下SQL代码应该为您解决这个问题...我想
UPDATE scores
set score = 0
FROM
scores s
INNER JOIN users u
on s.savefileid = u.savefileid -- primary key foreign key relationship here
AND s.timestamp = (SELECT max(timestamp) FROM Scores ss where ss.savefileid = s.savefileid )
WHERE user=x
AND title=y
在更新之前查看记录列表
Select *
FROM
scores s
INNER JOIN users u
on s.savefileid = u.savefileid -- primary key foreign key relationship here
AND s.timestamp = (SELECT max(timestamp) FROM Scores ss where ss.savefileid = s.savefileid )
WHERE user=x
AND title=y