繁体   English   中英

php JOIN 语句只从第二个表中返回一行

[英]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 的行: bestell 数据库行

在这里您可以看到来自“zurückschreibendatas”的所有行,其中包含“lieferscheinid”37: zurückschreibendatas 行

为了更好地理解,这是>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.idzurü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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM