加入MySql 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

我创建了一个数据库,并使用PHP连接到数据库并进行查询。有两张桌子,司机和车队。驱动程序具有以下字段:

  • 身份证
  • 名字
  • 国籍
  • 团队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