gpt4 book ai didi

php - mysql左连接不返回所有左表行

转载 作者:太空宇宙 更新时间:2023-11-03 10:43:24 25 4
gpt4 key购买 nike

我有两张 table

phonetype:
phonetypeID (PK)
phonetyepe

phone:
phoneID (PK)
peopleID (fK)
phonetypeID (fK)
areacode
number`

对于特定的 peopleID,我想返回所有的电话类型,如果 peopleID 有号码,则显示它,如果不为空。像这样的东西:

phonetype    phonetypeID    areacode    number
company 1 111 11111
fax 2
home 3 222 222222
mobile 4

这是我准备好的声明:

$stmt = $conn->prepare("SELECT *
FROM phonetype
LEFT JOIN phone
ON phonetype.phonetypeID=phone.phonetypeID
where phone.peopleID = ?;
");
if ( !$stmt ) {die(printf("Error: %s.\n", mysqli_stmt_error($stmt) ) );}
else if ( !$stmt->bind_param('i', $peopleID) ) {die(printf("Error: %s.\n", mysqli_stmt_error($stmt) ) );}

但是这样我只有

phonetype    phonetypeID    areacode    number
company 1 111 11111
home 3 222 222222

我做错了什么? PS 这是我第一次加入!!谢谢!!

编辑(这个问题跟在另一个问题 [ display data from database in a specific order: php or mysql? 之后。在阅读了 Gravel、Robbie Averill、Maximus2012 和 Miken32 的答案后,我明白拥有一个专用表 phonetype 并在其中使用外键是一个更好的设计电话表。认为这是一个完全不同的场景,我问了这个新问题。如果有人认为这是重复的并且有办法加入第 2 个问题,我会这样做。再次感谢所有花时间的人帮助我。)

最佳答案

在您的查询中;

SELECT *
FROM phonetype
LEFT JOIN phone
ON phonetype.phonetypeID=phone.phonetypeID
where phone.peopleID = ?

...在最右边的表上带有条件的 WHERE 子句将删除最右边的表没有值的所有行,否定 LEFT JOIN

您最可能想要的是将条件添加到 LEFT JOINON 子句中,允许 phone 的空值仍然出现;

SELECT *
FROM phonetype
LEFT JOIN phone
ON phonetype.phonetypeID=phone.phonetypeID
AND phone.peopleID = ?

关于php - mysql左连接不返回所有左表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34916051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com