我对mysql和php的使用已经不太熟悉了,但是我有一个项目正在为我的一个朋友工作,这个项目涉及从两个表中选择数据,并将它们组合成一个结果——看起来很简单。
表1有13个字段,但重要的字段是id(自动递增,主键)和serial(unique)。剩下的只是客户、描述等。
pictures有3个字段,picid(自动递增,主键),imagepath和serial
我需要从表1中检索所有数据,如果图片中有匹配的照片(由同一个序列标识-每个序列只能有一张照片),那么也要检索该数据。然后,我从表1输出数据,并使用imagepath from pictures以html格式构建一个已上载的图像。
我使用的查询是:
$sql = "SELECT * FROM Table1 LEFT JOIN Pictures ON Table1.serial = Pictures.serial ORDER BY Table1.serial";
这看起来很完美,除非表1中的任何一行在图片中没有照片匹配,否则序列不再与其余数据一起返回,尽管行的其余部分都是正确的。
我已经研究了不同类型的连接,以及我需要的是否只是联合,但我有点困惑。我应该如何查询以获得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] =>
)
1条答案
按热度按时间w46czmvw1#
这样做是因为table1和pictures都有一个名为serial的列,它在生成数组键时会删除表名。可能它在内部做了这样的事情:
因此,在得到的数组中,只有picture.serial作为键“serial”的值。
解决此问题的一种方法是显式指定列,不包括pictures.serial,如下所示: