非常奇怪的SQL错误,其中数据未正确拉取


Very strange SQL error where data is not being pulled correctly

我有两个页面非常相似,但做的事情略有不同。但是,两者都将数据放入名为 playerRegSeason 的表中。

这是我在一个页面上使用的SQL代码:

$sql2="INSERT INTO playerRegSeason 
       (playerID, year, teamID, gp, minutes, pts, oreb, dreb, reb, 
        asts, stl, blk, turnover, pf, fga, fgm, fta, ftm, tpa, tpm)
   SELECT playerID, $year, '$teamID', $gp, $minutes, $pts, $oreb, 
     $dreb, $reb, $asts, $stl, $blk, $turnover, $pf, $fga, $fgm, 
     $fta, $ftm, $tpa, $tpm FROM players WHERE firstname='".$firstname."' 
   AND lastname='".$lastname."' AND firstseason='".$firstseason."'";

这是另一个页面的代码:

$sql2="INSERT INTO playerRegSeason 
       (playerID, year, teamID, gp, minutes, pts, oreb, dreb, reb, 
        asts, stl, blk, turnover, pf, fga, fgm, fta, ftm, tpa, tpm)
   VALUES ($playerID, $year, '$teamID', $gp, $minutes, $pts, $oreb, 
     $dreb, $reb, $asts, $stl, $blk, $turnover, $pf, $fga, $fgm, 
     $fta, $ftm, $tpa, $tpm)";

在这两个页面上,当我查看数据库时,数据已添加并且格式正确。

现在,是我的问题。我有另一个页面显示表格的内容。以下是不起作用的代码:

$quer1 = "SELECT * FROM players p
        INNER JOIN playerRegSeason pr ON p.playerID = pr.playerID
        INNER JOIN teams t ON pr.teamID = t.teamID 
        WHERE p.firstname='$firstname' AND p.lastname='$lastname'";
        $result1 = mysqli_query($con, $quer1);
while($row = mysqli_fetch_array($result1)) {
            echo "<tr>";
            echo "<td>" . $row['year'] . "</td>";
            echo "<td>" . $row['location']." ". $row['name'] . "</td>";
            echo "<td>" . $row['leag'] . "</td>";
            echo "<td>" . $row['gp'] . "</td>";
            echo "<td>" . $row['minutes'] . "</td>";
            echo "<td>" . $row['pts'] . "</td>";
            echo "<td>" . $row['oreb'] . "</td>";
            echo "<td>" . $row['dreb'] . "</td>";
            echo "<td>" . $row['reb'] . "</td>";
            echo "<td>" . $row['asts'] . "</td>";
            echo "<td>" . $row['stl'] . "</td>";
            echo "<td>" . $row['blk'] . "</td>";
            echo "<td>" . $row['turnover'] . "</td>";
            echo "<td>" . $row['pf'] . "</td>";
            echo "<td>" . $row['fga'] . "</td>";
            echo "<td>" . $row['fgm'] . "</td>";
            echo "<td>" . $row['fta'] . "</td>";
            echo "<td>" . $row['ftm'] . "</td>";
            echo "</tr>";
            echo "</table>";
            }

奇怪的是,从第一个 sql 输入的任何数据都不会显示,但通过第二个 sql 语句输入的任何数据都会显示。即使这两个条目在数据库中以相同的 playerID 主键彼此相邻列出。

您正在执行两个内部连接,当您说两个条目具有相同的玩家 ID 时,您已经确认了其中一个,但它们是否也具有相同的团队 ID?

如果第一个条目没有团队表中存在的 teamID,则它不会通过查询传入。

检查这一点的一种快速方法是使用左联接更改团队表上的"内部联接",如果这会获得更多记录,则您的数据具有一些团队表中不存在的 teamID 值。

在第二组sql插入中,你总是要做一个插入(假设变量没有错误,等等(。

在第一组 sql 中,您正在执行一个 select 语句来执行插入,特别是查看您的 where 子句 - 如果该子句消除了所有返回的结果,则不会插入任何记录。 如果运行该语句:

SELECT *
-- input your expected values in place of the variables
FROM players WHERE firstname= ''
   AND lastname='' AND firstseason='';

您可能会看到此查询未返回任何内容,因此不会在第一个查询中插入任何内容。

根据您的评论,听起来问题(因为它不是由于第一个sql语句引起的(可能是由于内部连接:

尝试按如下方式查询:

SELECT * FROM players p
--INNER JOIN playerRegSeason pr ON p.playerID = pr.playerID
--INNER JOIN teams t ON pr.teamID = t.teamID 
WHERE p.firstname='$firstname' AND p.lastname='$lastname

看看你是否得到了你的预期价值。 如果是,请取消注释玩家RegSeason上的内部加入,如果仍然获得预期的行,请取消注释团队上的加入。 可能的原因是,要联接的表中至少有一个不包含预期的记录,因此查询未返回。 (或者按照 David 的建议,将内部联接更改为左联接以进行测试(