Php mysql左联接不返回所有左表行

Php mysql左联接不返回所有左表行,php,mysql,Php,Mysql,我有两张桌子 phonetype: phonetypeID (PK) phonetyepe phone: phoneID (PK) peopleID (fK) phonetypeID (fK) areacode number` 对于一个特定的peopleID,我想返回所有的电话类型,如果peopleID有号码,就显示它,如果不是空的话。比如: phonetype phonetypeID areacode number company 1

我有两张桌子

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这是我第一次加入!! 谢谢


编辑(此问题紧跟着另一个问题[.在阅读了Grasser、Robbie Averill、Maximus 2012和Miken32的答案后,我明白了一个更好的设计,那就是拥有一个专用的表phonetype,并在电话表中使用外键。考虑到这是一个完全不同的场景,我问了一个新问题。如果有人认为这是一个重复的,有办法加入第二个问题,我会做的。再次感谢所有花时间帮助我的人。)

使用和,而不是在哪里

SELECT *
FROM phonetype
LEFT JOIN phone
ON phonetype.phonetypeID=phone.phonetypeID
AND phone.peopleID = ?
在你的询问中

SELECT *
FROM phonetype
LEFT JOIN phone
ON phonetype.phonetypeID=phone.phonetypeID
where phone.peopleID = ?
…在最右边的表上带有条件的
WHERE
子句将删除最右边的表没有值的所有行,从而否定
左联接

您最可能希望的是将条件添加到
LEFT JOIN
ON
子句中,允许
phone
的空值仍然显示

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

你能说得更清楚些吗?你能把你的两个表都放在数据里吗?没有数据很难确定,但是用
替换
where
看起来可以解决问题。可能是@Gavriel-Gavriel的重复,请看我的编辑。希望它能解释我的意图。谢谢!是的!它很有效!谢谢!!谢谢你的解释ining为什么它有效!只是添加一些解释。
WHERE
JOIN
之后过滤结果,这就是为什么您只得到与ID匹配的行。要了解我的意思,请尝试
WHERE phone.peopleID=?和phone.peopleID为NULL
,您将得到与SIDU相同的结果