我必须查询给定的表。我无法改变表结构。它基本上是这样的:
user
-- ---------- ----
id address_id name
address
-- ---
id zip
language
-- ----
id lang
语言中的id
条目与用户的 id
相同。其主要关键字基于id
和lang
。 用户上的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);
可能有错吗?
答案 0 :(得分:2)
在看到您的查询后,我意识到您需要了解查询中的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
声明。