JOIN只返回一个结果

时间:2013-08-23 13:00:12

标签: php mysql pdo

我必须查询给定的表。我无法改变表结构。它基本上是这样的:

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

address
-- ---
id zip

language
-- ----
id lang

语言中的id条目与用户的 id相同。其主要关键字基于idlang用户上的address_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);

可能有错吗?

2 个答案:

答案 0 :(得分:2)

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

阅读tutorial of 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

答案 1 :(得分:2)

fetch()只会获取一行。在这样的循环中使用它:

while ($row = $stmt->fetch(PDO::FETCH_ASSOC))

fetchAll()行。

正如评论和 Broken Heartღ的回答中所讨论的那样,您还应该删除LIMIT 1声明。