我在使用MySQL和PHP时还很不熟练,但是我有一个正在为一个朋友工作的项目,该项目涉及从两个表中选择数据并将它们组合成一个结果-看起来很简单。
表1 有13个字段,但重要的字段是 id (自动递增,主键)和 serial (唯一)。其余的只是客户,说明等,等等。
图片具有3个字段, picID (自动递增,主键), imagePath 和 serial < / p>
我需要从表1中检索所有数据,如果“图片”中有匹配的照片(由相同的序列标识-每个序列只能有1张照片),那么也要检索该数据。然后,我从Table1输出数据,并使用Pictures中的 imagePath 从HTML中构建图像(如果已上传图像)。
我一直在使用的查询是:
$sql = "SELECT * FROM Table1 LEFT JOIN Pictures ON Table1.serial = Pictures.serial ORDER BY Table1.serial";
这似乎很完美,除了 Table1 中的任何一行在 Pictures 中没有照片匹配项,序列不再返回其余数据,尽管该行的其余部分都是正确的。
我研究了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] => )
答案 0 :(得分:1)
之所以这样做,是因为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