[英]php JOIN statement only returns one row from second table
我在 php 中有这个声明:
$takeBL = $connection -> prepare("SELECT bestelldatabase.*, zurückschreibendatas.* FROM bestelldatabase LEFT JOIN zurückschreibendatas USING (lieferscheinid) WHERE bestelldatabase.lieferscheinid = ?");
$takeBL -> execute([$_GET['id']]);
while ($getAllBL = $takeBL -> fetch()) {
array_push($products, $getAllBL);
}
这一切都有效,但唯一的问题是,sql 只返回连接表中第一个匹配的行,并将它们推送到数组中。 我不太了解 join 声明,当我尝试用谷歌搜索答案时,我真的很困惑。
这些都是来自 "bestelldatabase" 和 "lieferscheinid" 37 的行:
在这里您可以看到来自“zurückschreibendatas”的所有行,其中包含“lieferscheinid”37:
为了更好地理解,这是>var_dump($products):
array(22) {
["id"]=> string(3) "150" [0]=> string(3) "143"
["lieferscheinid"]=> string(2) "37" [1]=> string(2) "37"
["warenid"]=> string(1) "2" [2]=> string(1) "2"
["anzahl"]=> string(2) "12" [3]=> string(2) "12"
["flaschen"]=> string(1) "0" [4]=> string(1) "0"
[5]=> string(3) "150"
[6]=> string(2) "37"
["bestellid"]=> string(3) "140" [7]=> string(3) "140"
["gesamtkisten"]=> string(2) "15" [8]=> string(2) "15"
["gesamtflaschen"]=> string(1) "0" [9]=> string(1) "0"
["zurückkisten"]=> string(1) "6" [10]=> string(1) "6"
["zurückflaschen"]=> string(1) "0" [11]=> string(1) "0"
}
为了更好地理解,还有另一行 va 转储:
array(22) {
["id"]=> string(3) "150" [0]=> string(3) "142"
["lieferscheinid"]=> string(2) "37" [1]=> string(2) "37"
["warenid"]=> string(1) "7" [2]=> string(1) "7"
["anzahl"]=> string(1) "6" [3]=> string(1) "6"
["flaschen"]=> string(1) "0" [4]=> string(1) "0"
[5]=> string(3) "150"
[6]=> string(2) "37"
["bestellid"]=> string(3) "140" [7]=> string(3) "140"
["gesamtkisten"]=> string(2) "15" [8]=> string(2) "15"
["gesamtflaschen"]=> string(1) "0" [9]=> string(1) "0"
["zurückkisten"]=> string(1) "6" [10]=> string(1) "6"
["zurückflaschen"]=> string(1) "0" [11]=> string(1) "0"
}
编辑 这是我编辑过的声明:
"SELECT
b.id,
b.lieferscheinid,
b.warenid,
b.anzahl,
b.flaschen,
z.id,
z.lieferscheinid,
z.bestellid,
z.gesamtkisten,
z.gesamtflaschen,
z.zurückkisten,
z.zurückflaschen
FROM bestelldatabase AS b
LEFT JOIN zurückschreibendatas AS z
USING (lieferscheinid)
WHERE b.lieferscheinid = ?"
而且我还忘记提及一件重要的事情:如果我将 WHERE 子句从“WHERE b.lieferscheinid = ?”更改为到“哪里 z.lieferscheinid = ?”
问题转过身来,然后是第一个表“bestelldatabase”,它只返回一行。 那么我做错了什么?
您需要使用on
语句并根据相关列join
两个表,在本例中为bestelldatabase.id
和zurückschreibendatas.bestellid
。
所以整个查询结果如下:
SELECT bestelldatabase.*, zurückschreibendatas.*
FROM bestelldatabase
LEFT JOIN zurückschreibendatas
on bestelldatabase.id = zurückschreibendatas.bestellid
WHERE bestelldatabase.lieferscheinid = ?
where
限制返回的数据, on
告诉连接应该如何映射。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.