Php JOIN只返回一个结果

Php JOIN只返回一个结果,php,mysql,pdo,Php,Mysql,Pdo,我必须查询给定的表。我不能改变桌子的结构。基本上是这样的: user -- ---------- ---- id address_id name address -- --- id zip language -- ---- id lang while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 其中,语言中条目的id与用户的id相同。它的主键基于id和langaddress\u id可以是null 现在我想通过一个查询获取所有信息。我试过: SE

我必须查询给定的表。我不能改变桌子的结构。基本上是这样的:

user
-- ---------- ----
id address_id name

address
-- ---
id zip

language
-- ----
id lang
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
其中,语言中条目的
id
与用户的
id
相同。它的主键基于
id
lang
<用户上的code>address\u id可以是
null

现在我想通过一个查询获取所有信息。我试过:

SELECT
    p.name,
    l.lang,
    a.zip

FROM user p

JOIN language l ON p.id = l.id

LEFT JOIN address a ON p.address_id = a.id

WHERE p.id = :id

LIMIT 1
除了一件事之外,它实际上可以工作:它只返回连接到用户的第一种语言。如何检索所有语言

编辑

我正在使用PHP PDO检索结果:

$value = $stmt->fetch(PDO::FETCH_ASSOC);

可能有错误吗?

看到您的查询后,我意识到您需要了解查询中的
限制
子句

读这本书

您正在查询中使用
LIMIT 1
,这就是为什么它只检索一行。 删除该limit子句以从查询中获取完整数据

编辑:

或者尝试以下查询,而不是您的查询:

SELECT
    p.name,
    l.lang,
    a.zip
FROM user p, language l, address a
WHERE p.id = l.id AND p.address_id = a.id AND p.id = :id

看到您的查询后,我意识到您需要了解查询中的
LIMIT
子句

读这本书

您正在查询中使用
LIMIT 1
,这就是为什么它只检索一行。 删除该limit子句以从查询中获取完整数据

编辑:

或者尝试以下查询,而不是您的查询:

SELECT
    p.name,
    l.lang,
    a.zip
FROM user p, language l, address a
WHERE p.id = l.id AND p.address_id = a.id AND p.id = :id
将只获取一行。在如下循环中使用它:

user
-- ---------- ----
id address_id name

address
-- ---
id zip

language
-- ----
id lang
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
一次或两行

正如《心碎》在评论和回答中已经讨论过的那样ღ, 您还应该删除
LIMIT 1
语句。

将只获取一行。在如下循环中使用它:

user
-- ---------- ----
id address_id name

address
-- ---
id zip

language
-- ----
id lang
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
一次或两行



正如《心碎》在评论和回答中已经讨论过的那样ღ, 您还应该删除
LIMIT 1
语句。

删除
LIMIT 1
?这不应该是
p
而不是
e
吗?我已经试过了。很遗憾,这不会更改结果集。@ExplosionPills正确。修正了这个问题,我从一个更大的查询中减少了这个问题。那么,语言表中的某个
id
是否有多条记录?删除
限制1
?这不应该是
p
而不是
e
?我已经尝试过了。很遗憾,这不会更改结果集。@ExplosionPills正确。修复了这个问题,我从一个更大的查询中减少了这个问题。那么,语言表中的某个
id
是否有多条记录?根据OP,哪些记录给出了相同的结果?非常感谢您的帮助。当我得到那15个代表的时候,我也会回来投票。终于得到了代表。;)根据OP的说法,哪一个给出了相同的结果?非常感谢你的帮助。当我得到那15个代表的时候,我也会回来投票。终于得到了代表。;)非常感谢你的帮助。当我得到那15个代表的时候,我会回来投票。终于得到了代表。;)非常感谢你的帮助。当我得到那15个代表的时候,我会回来投票。终于得到了代表。;)