PDO左连接:显示记录一次而不是两次

时间:2015-04-13 17:53:18

标签: join pdo

我试图用左连接链接两个表,然后显示玩家的名字和他选择的角色,但当我回应结果时,我得到玩家的第一个姓名记录两次:

球员的名字:耶勒

球员的名字:耶勒

玩家角色的名字:Gandalf

玩家角色的名字:Aragorn

当我真正想要这个时:

球员的名字:耶勒

玩家角色的名字:Gandalf

玩家角色的名字:Aragorn

据我所知,如果玩家有两个角色,我会获得两次记录,但如何显示玩家的名字一次以及所有其他相应的角色?

This is my code:



   try{
    $statement = $connection->prepare('
    SELECT *
        FROM TBL_Player
    LEFT JOIN TBL_Character
        ON TBL_Player.ID = TBL_Character.Player_ID
        WHERE TBL_Player.ID = 1;                
    ');
    $statement->execute();

    while (($Player = $statement->fetch(PDO::FETCH_OBJ)) !== false){
        echo "Player's first name: ".$Player->FirstName. "</br>";
        echo "Player's Character's first name: ".$Player->CharacterFirstName. "</br>";

    }

} 

catch (PDOException $e){
    echo 'ERROR: ' . $e->getMessage();
}

1 个答案:

答案 0 :(得分:0)

您可以使用计数器,并且仅在第一次通过循环输出播放器名称:

$i=0;
while (($Player = $statement->fetch(PDO::FETCH_OBJ)) !== false){
  if( $i == 0 ){
    echo "Player's first name: ".$Player->FirstName. "</br>";
  }
  echo "Player's Character's first name: ".$Player->CharacterFirstName. "</br>";
  $i++;
}

或者,如果你有多个玩家,你可以用数组跟踪

$aryTracker = array();
while (($Player = $statement->fetch(PDO::FETCH_OBJ)) !== false){
  if( !in_array($Player->Id, $aryTracker) ){
    echo "Player's first name: ".$Player->FirstName. "</br>";
    $aryTracker[] = $Player->Id;     
 }
  echo "Player's Character's first name: ".$Player->CharacterFirstName. "</br>";

}
相关问题