加入MySql PHP
我创建了一个数据库,并使用PHP连接到数据库并进行查询。有两张桌子,司机和车队。驱动程序具有以下字段:加入MySql PHP,php,mysql,database,Php,Mysql,Database,我创建了一个数据库,并使用PHP连接到数据库并进行查询。有两张桌子,司机和车队。驱动程序具有以下字段: 身份证 名字 姓 国籍 团队id 这些团队具有以下字段: -身份证 -名字 -引擎 -国籍 -基于 -原则 我正在尝试创建一个查询来显示车手的名字、姓氏、国籍和车队名称 我使用了以下代码: $result = mysqli_query($con, "SELECT * FROM Drivers JOIN Teams ON Drivers.id = Teams.id"); e
- 身份证
- 名字
- 姓
- 国籍
- 团队id
$result = mysqli_query($con, "SELECT * FROM Drivers
JOIN Teams
ON Drivers.id = Teams.id");
echo "<table border='1'>
<tr>
<th>forename</th>
<th>surname</th>
<th>Nationality</th>
<th>Team</th>
</tr>";
while($row = mysqli_fetch_array($result))
{
echo "<tr>";
echo "<td>" . $row['forename'] . "</td>";
echo "<td>" . $row['surname'] . "</td>";
echo "<td>" . $row['nationality'] . "</td>";
echo "<td>" . $row['name'] . "</td>";
echo "</tr>";
}
echo "</table>";
$result=mysqli\u查询($con,“从驱动程序中选择*)
加入团队
关于Drivers.id=Teams.id”);
回声“
名字
姓
国籍
团队
";
while($row=mysqli\u fetch\u数组($result))
{
回声“;
回显“$row['forename']”;
回显“$行[“姓氏]”;
回显“$行[“国籍]”;
回显“$row['name']”;
回声“;
}
回声“;
这就是我得到的结果:
forename surname Nationality Team
Sebastian Vettel Austrian Red Bull
Mark Webber Italian Ferrari
Jenson Button British Mclaren
Lewis Hamilton German Mercedes
Fernando Alonso British Lotus
Felipe Massa Indian Force India
Michael Schumacher Swiss Sauber
Nico Rosberg Italian Torro Rosso
Kimi Raikkonen British Williams
Romain Grosjean British Caterham
Jerome d'Ambrosio Spanish HRT
Paul di Resta Russian Marussia
名姓民族队
塞巴斯蒂安·维特尔奥地利红牛
马克·韦伯意大利法拉利
简森·巴顿英国迈凯轮
刘易斯·汉密尔顿德国梅赛德斯
费尔南多·阿隆索英国莲花
菲利佩·马萨印度部队
迈克尔·舒马赫瑞士索伯
尼科·罗斯伯格意大利托罗·罗索
基米·莱科宁英国威廉姆斯
罗曼·格罗斯让英国卡特拉姆酒店
杰罗姆·德安布罗西奥西班牙HRT
保罗·迪雷斯塔俄罗斯马鲁西亚酒店
然而,结果并没有显示所有的驱动因素。我做错了什么?你需要加入drivers.team\u id而不是drivers.id 您还应该执行左连接,以便仍然选择没有车队的驾驶员:
SELECT * FROM Drivers LEFT JOIN Teams ON Drivers.team_id = Teams.id
您需要加入drivers.team\u id而不是drivers.id 您还应该执行左连接,以便仍然选择没有车队的驾驶员:
SELECT * FROM Drivers LEFT JOIN Teams ON Drivers.team_id = Teams.id
$result=mysqli\u查询($con,“从驱动程序中选择*)
左派加入球队
关于Drivers.team_id=Teams.id”);
回声“
名字
姓
国籍
团队
";
while($row=mysqli\u fetch\u数组($result))
{
回声“;
回显“$row['forename']”;
回显“$行[“姓氏]”;
回显“$行[“国籍]”;
回显“$row['name']”;
回声“;
}
回声“;
$result=mysqli\u query($con,“从驱动程序中选择*)
左派加入球队
关于Drivers.team_id=Teams.id”);
回声“
名字
姓
国籍
团队
";
while($row=mysqli\u fetch\u数组($result))
{
回声“;
回显“$row['forename']”;
回显“$行[“姓氏]”;
回显“$行[“国籍]”;
回显“$row['name']”;
回声“;
}
回声“;
第一件事:不要选择*
如果你不打算使用每个字段,那就是浪费资源。要仅获取姓名
、姓氏
、国籍
和姓名
,您可以按如下方式修改查询:
SELECT D.forename, D.surname, D.nationality, T.name
FROM Drivers AS D
JOIN Teams AS T ON Drivers.id = Teams.id;
SELECT D.forename, D.surname, D.nationality, T.name
FROM Drivers AS D
JOIN Teams AS T ON Drivers.team_id = Teams.id;
现在,对于一些没有出现的司机,有两个可能的罪魁祸首:
1-JOIN
在MySQL中是内部连接的同义词:
在MySQL中,连接、交叉连接和内部连接是语法等价物(它们可以相互替换)。在标准SQL中,它们不是等价的。()
内部联接
仅显示两个表中存在的行。因此,如果您的驱动程序与任何团队都没有关联,或者与任何团队没有关联,则内部联接将从结果集中排除它们。如果要查看每个驱动程序,请使用driversleft-JOIN-Teams
;如果要查看每个团队,请使用Drivers RIGHT JOIN Teams
。(右<代码>和左<代码>关键字是指表在查询中的显示顺序,因此驱动程序左加入团队
与团队右加入驱动程序
是一样的)
有关这些部分的一个常用资源是,可以更好地了解不同类型的连接
2-您确定您已使用正确的ON
条件加入这些表吗?这两个表的id
列不同;驱动程序Bob可能拥有Drivers.id=4341
,但他不太可能也是拥有Team.id=4341
的团队的成员。根据您对表的描述,您似乎希望将Drivers.team_id
与team.id
匹配,因此您的查询将进一步修改如下:
SELECT D.forename, D.surname, D.nationality, T.name
FROM Drivers AS D
JOIN Teams AS T ON Drivers.id = Teams.id;
SELECT D.forename, D.surname, D.nationality, T.name
FROM Drivers AS D
JOIN Teams AS T ON Drivers.team_id = Teams.id;
第一件事:不要选择*
如果你不打算使用每个字段,那是浪费资源。要仅获取姓名
、姓氏
、国籍
和姓名
,您可以按如下方式修改查询:
SELECT D.forename, D.surname, D.nationality, T.name
FROM Drivers AS D
JOIN Teams AS T ON Drivers.id = Teams.id;
SELECT D.forename, D.surname, D.nationality, T.name
FROM Drivers AS D
JOIN Teams AS T ON Drivers.team_id = Teams.id;
现在,对于一些没有出现的司机,有两个可能的罪魁祸首:
1-JOIN
在MySQL中是内部连接的同义词:
在MySQL中,连接、交叉连接和内部连接是语法等价物(它们可以相互替换)。在标准SQL中,它们不是等价的。()
内部联接
仅显示两个表中存在的行。因此,如果您的驱动程序与任何团队都没有关联,或者与任何团队没有关联,则内部联接将从结果集中排除它们。如果要查看每个驱动程序,请使用driversleft-JOIN-Teams
;如果要查看每个团队,请使用Drivers RIGHT JOIN Teams
。(右<代码>和左<代码>关键字是指表在查询中的显示顺序,因此驱动程序左加入团队
与团队右加入驱动程序
是一样的)
有关这些部分的一个常用资源是,可以更好地了解不同类型的连接
2-您确定您已使用正确的ON
条件加入这些表吗?这两个表的id
列不同;驱动程序Bob可能有Drivers.id=4341