mysql连接是否为null

sf6xfgos  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(377)

我对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] => 
        )
w46czmvw

w46czmvw1#

这样做是因为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

相关问题