mySQL更新但也不更新

标签 mysql ranking

我正在用 mySQL/PHP 编写,但遇到这个问题我无法理解。这个 PHP 脚本包含两个 SQL 语句。我想要做的是更新一个体育联赛表(一个名为 tblrank 的 SQL 表——它包含许多联赛表,由 TableID 分隔),并指示自上次更新以来球队是上升还是下降。第一段代码有点笨拙,可能可以写得更好(我可以在 MSSQL 中用大约 6 行来完成),它的工作原理是计算排名低于它的团队的数量,然后添加一个。它似乎有效……有点像,我稍后会解释。

update tblrank AS r
        set Rank = 1 + (select count(*) from 
                             (select r2.teamID
                              from tblrank r2
                                   inner join tblrank r3
                              where r3.TableID = r2.TableID and r3.TableID = $tableid
                              and (r3.Points > r2.Points
                                  or (r3.Points = r2.Points and r3.TieBreaker > r2.TieBreaker))) as duh
                        where duh.teamID = r.teamID 
                        and duh.TableID = r.TableID 
                        and r.TableID = $tableid

然后,运行这段代码来选择要显示的图像。

update tblrank
set image = case when Rank < LastRank then 'up.png'
        when Rank > LastRank then 'down.png'
        else 'nomove.png' end
where TableID = $tableid

现在,如果我为 $tableid = 1 运行它,它工作得很好。但是,如果我为 $tableid = 2 运行它,那么整个 tblRank 中的所有等级都设置为 1。(在为 $tableid = 2 运行它之前,所有等级都是 1,除了 TableID =1 的记录)。这显然不是我想要的。

这两个语句都在 if(mysql_query($sql)) 条件语句中,因此我可以验证它们是否已执行。

我使用 MS SQL 的次数比 mySQL 多得多,所以我不是专家 - 任何人都可以帮助我解决这个问题,因为我感到困惑!我已经检查过这两个代码块都执行了。两者之间没有执行其他SQL。

最佳答案

好吧,我已经修复了它,我不确定哪里出了问题,但我已经将更新语句拆分了,首先创建并填充了一个名为 rankcount 的临时表。我这样做是为了更容易看到发生了什么。

create temporary table rankcount (TableID int, UserID int)");
   insert into rankcount (TableID, UserID)
            select r2.TableID, r2.UserID
                from tblRank r2
                                inner join tblRank r3
            where r3.TableID = r2.TableID and r3.TableID = $tableid
            and (r3.Points > r2.Points
                   or (r3.Points = r2.Points and r3.TieBreakerOne > r2.TieBreakerOne))

然后这有效...

update userEntryTableRank r
        set Rank = 1 + (select count(*) from rankcount rc
                        where rc.UserID = r.UserID and rc.TableID = r.TableID)
        where r.TableID = $tableid

:)

关于mySQL更新但也不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2059526/

相关文章:

mysql - 基于 MySQL 具有相同行值的特定列对列进行排名

python - 噪声约束下的时间排序数据帧

mysql - Foxpro复杂子查询

mysql - 带有 mysql 数据库的炼油厂 cms

PHP MYSQL XML 错误

mysql - 从文件或数据库生成 CSS 文件 (PHP)

java - 根据产品功能排名

恢复 Django-mailer 数据库时出现 MySQL 错误 1118(行大小太大)

c# - 关键词排序算法

mysql - 在 GROUP BY 中使用 LIMIT 来获得每组 N 个结果?