Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.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 - Fatal编程技术网

Php 从两次联接的表中分配变量

Php 从两次联接的表中分配变量,php,sql,join,Php,Sql,Join,我试图将$row[]值赋给一个变量,以便在表单中使用它。因为我两次加入表,所以有两列具有相同的名称。我尝试使用如图所示的别名来分配变量,但它们返回null,可能是语法错误?。查询结果很好 <?php //This will list player info so the user can get the correct player ID $STH = $db->query(' SELECT wW.id, wW.dateStart, wW.dateE

我试图将$row[]值赋给一个变量,以便在表单中使用它。因为我两次加入表,所以有两列具有相同的名称。我尝试使用如图所示的别名来分配变量,但它们返回null,可能是语法错误?。查询结果很好

<?php
//This will list player info so the user can get the correct player  ID
$STH = $db->query('
                SELECT wW.id, wW.dateStart, wW.dateEnd, wW.weekNumber, wW.team1Id, wW.team2Id, wT1.name, wT2.name 
                FROM wdlWeeks wW
                JOIN wdlTeams wT1 on wT1.id = wW.team1Id
                JOIN wdlTeams wT2 on wT2.id = wW.team2Id
            ');

//Setting the fetch mode
$STH->setFetchMode(PDO::FETCH_ASSOC);

//Output all players with their ID's

while($row = $STH->fetch()) {

    $id = $row['wW.id'];
    $team1Name = $row['wT1.name'];
    $team2Name = $row['wT2.name'];
    $dateStart = $row['wW.dateStart'];
    $dateEnd = $row['wW.dateEnd'];
    $weekNumber = $row['wW.weekNumber'];

    echo "<option value='$id'>$team1Name vs. $team2Name (Week: $weekNumber - $dateStart - $dateEnd)</option>";
    echo "<br>";
}

?>
你不需要wW。在每个变量的前面,列将作为它们的名称返回

另外,由于您有两个同名的列,因此您必须修改查询,以便为其中一个名称列提供类似以下的另一个名称

$STH = $db->query('
            SELECT wW.id, wW.dateStart, wW.dateEnd, wW.weekNumber, 
                 wW.team1Id, wW.team2Id, wT1.name, wT2.name as t2name
            FROM wdlWeeks wW
            JOIN wdlTeams wT1 on wT1.id = wW.team1Id
            JOIN wdlTeams wT2 on wT2.id = wW.team2Id
        ');
//Setting the fetch mode
$STH->setFetchMode(PDO::FETCH_ASSOC);

//Output all players with their ID's

while($row = $STH->fetch()) {
    $id = $row['id'];
    $team1Name = $row['name'];
    $team2Name = $row['t2name'];
    $dateStart = $row['dateStart'];
    $dateEnd = $row['dateEnd'];
    $weekNumber = $row['weekNumber'];

    echo "<option value='$id'>$team1Name vs. $team2Name (Week: $weekNumber - $dateStart - $dateEnd)</option>";
    echo "<br>";
}

每个字段可以使用别名:

选择wW.id、wW.dateStart、wW.dateEnd、wW.weekNumber、wW.team1Id、wW.team2Id、wT1.name作为Team1Name,wT2.name作为Team2Name 来自wdlWeeks wW 在wT1.id=wW.team1Id上加入wdlTeams wT1 在wT2.id=wW.team2Id上加入wdlTeams wT2

然后:


$team1Name=$row['team1Name']

默认情况下别名是列名,因此您有两个使用'name'的列,并且根本不包括表别名。例如,在查询中使用AS wT1name,然后将这些字符串用于从$row提取的别名。像这样:

<?php
//This will list player info so the user can get the correct player  ID
$STH = $db->query('
                SELECT wW.id, wW.dateStart, wW.dateEnd, wW.weekNumber, wW.team1Id, wW.team2Id, wT1.name AS wT1name, wT2.name AS wT2name
                FROM wdlWeeks wW
                JOIN wdlTeams wT1 on wT1.id = wW.team1Id
                JOIN wdlTeams wT2 on wT2.id = wW.team2Id
            ');

//Setting the fetch mode
$STH->setFetchMode(PDO::FETCH_ASSOC);

//Output all players with their ID's

while($row = $STH->fetch()) {

    $id = $row['id'];
    $team1Name = $row['wT1name'];
    $team2Name = $row['wT2name'];
    $dateStart = $row['dateStart'];
    $dateEnd = $row['dateEnd'];
    $weekNumber = $row['weekNumber'];

    echo "<option value='$id'>$team1Name vs. $team2Name (Week: $weekNumber - $dateStart - $dateEnd)</option>";
    echo "<br>";
}

?>