Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.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中的SQL查询,将具有相同外键的两列的表连接起来_Php_Mysql - Fatal编程技术网

PHP中的SQL查询,将具有相同外键的两列的表连接起来

PHP中的SQL查询,将具有相同外键的两列的表连接起来,php,mysql,Php,Mysql,所以我需要加入5个表。其中一个我有问题。它有两列,它们是不同表的相同外键 matchdetail idmatch | idplayer1 | idplayer2 | time | (FK) idmatchnight (FK) 这是一张连接桌子 player (PK) idplayer | firstname | secondname | nationality matchnight (PK) idmatchnight | location 我的sql查询应该是什么 我当前的代码:不

所以我需要加入5个表。其中一个我有问题。它有两列,它们是不同表的相同外键

matchdetail  
idmatch | idplayer1 | idplayer2 | time | (FK) idmatchnight (FK)
这是一张连接桌子

player
(PK) idplayer | firstname | secondname | nationality 

matchnight
(PK) idmatchnight | location 
我的sql查询应该是什么

我当前的代码:不工作

SELECT * FROM player
INNER JOIN coach ON player.idcoach = coach.idcoach
INNER JOIN sponsor ON player.idsponsor = sponsor.idsponsor
INNER JOIN matchdetail ON player.idplayer = matchdetail.idplayer1
                                        AND player.idplayer = matchdetail.idplayer2
INNER JOIN matchnight ON matchdetail.idmatch
WHERE player.idplayer=:idplayer
;"

idmatch是一个代理主键,而不是复合键。可能最好重新编写查询:

SELECT ...
FROM matchdetail
INNER JOIN player AS p1 ON matchdetail.player1=p1.idplayer
INNER JOIN player AS p2 on matchdetail.player2=p2.idplayer
etc...

您当前的加入基本上只允许玩家自己进行比赛。通过加入
player
两次,您可以获得两个不同玩家的详细信息。

如果您希望保留此逻辑,您还可以使用或代替AND:

SELECT columns, you, actually, want 
  FROM matchnight m
  JOIN matchdetail d
    ON d.idmatchnight = m.idmatchnight
  JOIN player p1
    ON p1.idplayer = d.idplayer1
  JOIN player p2
    ON p2.idplayer = c.idplayer2;
SELECT * FROM player
INNER JOIN coach ON player.idcoach = coach.idcoach
INNER JOIN sponsor ON player.idsponsor = sponsor.idsponsor
INNER JOIN matchdetail ON (player.idplayer = matchdetail.idplayer1
                                        OR player.idplayer = matchdetail.idplayer2)
INNER JOIN matchnight ON matchdetail.idmatch
WHERE player.idplayer=:idplayer;
问题是,对于当前谓词(with AND),它基本上与:

player.idplayer = matchdetail.idplayer1 = matchdetail.idplayer2

谢谢大家的回答

我自己找到了解决办法:)


一个小小的解释会有很大帮助;-)
SELECT * FROM matchdetail
INNER JOIN boxer ON matchdetail.idplayer1
                    AND matchdetail.idplayer2
INNER JOIN coach ON player.idcoach = coach.idcoach
INNER JOIN sponsor ON player.idsponsor = sponsor.idsponsor
INNER JOIN matchnight ON matchdetail.idmatchnight = matchnight.idmatchnight
WHERE player.idplayer