Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用内部联接将数字从一个表添加到另一个表-帮助!_Php_Sql_Join_Inner Join_Sql Update - Fatal编程技术网

Php 使用内部联接将数字从一个表添加到另一个表-帮助!

Php 使用内部联接将数字从一个表添加到另一个表-帮助!,php,sql,join,inner-join,sql-update,Php,Sql,Join,Inner Join,Sql Update,我在网上冲浪,发现了一些类似于我想要的东西,但它没有执行…请帮助 我的表具有以下结构: TABLE team id integer autoincrement primary key, name varchar, pointsfavor integer, pointscontra integer TABLE game id integer autoincrement primary key, team1_id integer, team2_id integer,

我在网上冲浪,发现了一些类似于我想要的东西,但它没有执行…请帮助

我的表具有以下结构:

TABLE team
  id integer autoincrement primary key,
  name varchar,
  pointsfavor integer,
  pointscontra integer

TABLE game
  id integer autoincrement primary key,
  team1_id integer,
  team2_id integer,
  score1 integer, /*score for team1*/
  score2 integer /*score for team2*/
到目前为止,我有以下更新声明:

UPDATE team 
INNER JOIN game g1 ON (team.id = g1.team1_id)
INNER JOIN game g2 ON (team.id = g2.team2_id)
SET pointsfavor = pointsfavor 
      + IF(g1.score1 > g1.score2, g1.score1 - g1.score2, 0) 
      + IF(g2.score2 > g2.score1, g2.score2 - g2.score1, 0)
  , pointscontra = pointscontra 
      + IF(g1.score1 < g1.score2, g1.score2 - g1.score1, 0) 
      + IF(g2.score2 < g2.score1, g2.score1 - g2.score2, 0)
WHERE g1.id = 1;
当我把它放在我的sql中时,它会执行这个函数,但它不会改变团队中的“pointsfavor”和“PointsCentra”字段。。。所以它说,受影响的行0

看:

以下是我在游戏表score1和score2中输入的值:

这是我完成代码后的团队表…保持不变:


请提供帮助。

使用左连接而不是内连接:

UPDATE team 
LEFT JOIN game g1 ON (team.id = g1.team1_id)
LEFT JOIN game g2 ON (team.id = g2.team2_id)
SET pointsfavor = pointsfavor 
      + IF(g1.score1 > g1.score2, g1.score1 - g1.score2, 0) 
      + IF(g2.score2 > g2.score1, g2.score2 - g2.score1, 0)
  , pointscontra = pointscontra 
      + IF(g1.score1 < g1.score2, g1.score2 - g1.score1, 0) 
      + IF(g2.score2 < g2.score1, g2.score1 - g2.score2, 0)
WHERE g1.id = 1;

我不知道你的表字段是什么,也不知道你的代码是如何工作的,但我想你的问题在于你的if语句 例如,在第一次更新中,如果g1.score1>g1.score2,那么g1.score1-g1.score2,第二次更新中,如果g1.score1>g1.score2,那么PointsScoreA+0+0,下一次IF也会执行相同的操作,那么在这个查询中,只有pointsfavor受到影响 所以,当第一个子句语句点avor是正确的,那么第二个子句语句是错误的!
再次看一看你的代码

两次更新,每个团队一次:

UPDATE team t1
SET t1.pointsfavor = t1.pointsfavor + IF(game.score1 > game.score2, game.score1 - game.score2, 0)
, t1.pointscontra = t1.pointscontra + IF(game.score2 > game.score1, game.score2 - game.score1, 0)
FROM team
INNER JOIN game ON game.team1_id=t1.id
WHERE game.id = 1

UPDATE team t2
SET t2.pointsfavor = t2.pointsfavor + IF(game.score2 > game.score1, game.score2 - game.score1, 0)
, t2.pointscontra = t2.pointscontra + IF(game.score1 > game.score2, game.score1 - game.score2, 0)    
FROM team
INNER JOIN game ON game.team2_id=t2.id
WHERE game.id = 1

thnx。。。它只更新了team.id=1中的pointsfavor…对此有什么答案吗?我不知道你的表字段是什么,也不知道你的代码是如何工作的,但我猜你的问题在于你的if语句: