我有两个页面非常相似,但做的事情略有不同。但是,两者都将数据放入名为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主键。
答案 0 :(得分:1)
在第二组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
查看您是否获得了预期的价值。如果是,请取消注释playerRegSeason上的内部联接,如果仍然获得预期的行,则取消注释团队中的联接。可能的原因是您加入的表中至少有一个不包含您期望的记录,因此查询不会返回。 (或者正如David建议的那样,为了测试目的,将你的内连接更改为左连接)
答案 1 :(得分:1)
你正在做两个内连接,当你说两个条目都有相同的玩家ID时,你已经确认了其中一个,但它们是否也有相同的teamID?
如果第一个条目没有团队表中存在的teamID,则无法通过您的查询进入。
检查此问题的一种快捷方法是更改“内部联接”。在带有LEFT JOIN的团队表上,如果这样可以获得更多记录,那么您的数据会有一些不存在于团队表中的teamID值。