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个代表的时候,我会回来投票。终于得到了代表。;)