gpt4 book ai didi

MySQL JOIN 是否为空

转载 作者:行者123 更新时间:2023-11-29 02:41:27 25 4
gpt4 key购买 nike

我不太熟悉 MySQL 和 PHP,但我正在为一位 friend 做一个项目,该项目涉及从两个表中选择数据,并将它们组合成一个结果 - 看起来很简单。

表1有13个字段,但重要的是id(自增,主键)和serial(唯一)。剩下的就是客户描述

Pictures有3个字段,picID(自增,主键),imagePathserial

我需要从表 1 中检索所有数据,如果图片中有匹配的照片(由相同的序列号 标识 - 每个序列号只能有 1 张照片),那么也检索该数据.然后我从 Table1 输出数据,并使用 Pictures 中的 imagePath 以 HTML 格式构建图像(如果已上传)。

我一直在使用的查询是:

$sql = "SELECT * FROM Table1 LEFT JOIN Pictures ON Table1.serial = Pictures.serial ORDER BY Table1.serial";

这看起来很完美,除非 Table1 中的任何行在 Pictures 中没有匹配的照片,serial 不再返回其余数据,尽管该行的其余部分都是正确的。

我研究了不同类型的 JOIN,以及它是否只是我需要的 UNION,但我有点难过。我应该如何查询以获取 Table1 的每一行 plus Pictures.imagePath 添加到匹配的 Table1 行(如果存在)?

感谢您的宝贵时间!!!! :)

使用转储数组输出进行编辑

    Array(    [0] => Array        (            [id] => 51            [0] => 51            [client] => Test Client            [1] => Test Client            [location] => Ayreford House            [2] => Ayreford House            [description] => Ceiling cavity of building XYZ            [3] => Ceiling cavity of building XYZ            [serial] =>            [4] => 18001            [blah] => 123456            [5] => 123456            [fw] => Wall            [6] => Wall            [pm] => Plasterboard            [7] => Plasterboard            [stuff] => ventilation ducting            [8] => ventilation ducting            [ref] => S1000-2018            [9] => S1000-2018            [otheref] => XTX-1325            [10] => XTX-1325            [notes] => Updated photo            [11] => Updated photo            [date] => 2018-06-28 21:37:49            [12] => 2018-06-28 21:37:49            [picID] =>             [13] =>             [imagePath] =>             [14] =>             [15] =>         )

最佳答案

这样做是因为 Table1 和 Pictures 都有一个名为 serial 的列,并且它在生成数组键时会删除表名。可能它在内部做这样的事情:

$result = array()
$result[0] = Table1.serial;
$result['serial'] = Table1.serial;
$result[1] = Table1.client;
$result['client'] = Table1.client;
....
$result[14] = Pictures.serial;
$result['serial'] = Pictures.serial;

因此,您最终只得到 Picture.serial 作为结果数组中键“serial”的值。

解决此问题的一种方法是明确指定您的列并且不包括 Pictures.serial,如下所示:

SELECT 
Table1.id,
Table1.client,
Table1.location,
Table1.description,
Table1.serial,
Pictures.notes
FROM
Table1
LEFT JOIN
Pictures ON Table1.serial = Pictures.serial
ORDER BY
Table1.serial

关于MySQL JOIN 是否为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51111469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com