Codeigniter 查询中的 WHERE 子句过度过滤带有 LEFT JOIN 的 SELECT 查询

问题描述 投票:0回答:2

我在尝试从两个 MySQl 表获取数据时遇到了麻烦。 在第一个表中我存储了图像文件名;在第二个表中,我存储了有关每个图像的信息;信息有两种语言,en 和 it。当然,并非第一个表中的所有图像都在第二个表中包含信息。 我正在尝试通过以下方式获取所选语言的图像信息:

$this->db->select ('
    tbl_images.image,
    tbl_infos.info
');
       
$this->db->from('tbl_images');
$this->db->join('tbl_infos', 'tbl_images.id = tbl_infos.id', 'left');
$this->db->where('tbl_images.id', $id);
$this->db->where('tbl_infos.lang', 'en');

现在...如果 tbl_infos 表有文本,查询将返回正确的数据,但如果没有存储信息,我会收到错误,因为没有检索到图像;如果我删除 lang where 子句,如果没有存储信息,我会得到图像...但我会得到带有信息的图像两次!!

我快疯了,完全陷入困境......我该如何解决这个问题?

sql codeigniter where-clause left-join query-builder
2个回答
0
投票

试试这个

$this->db->join('tbl_infos', 'tbl_images.id = tbl_infos.id');


0
投票

愚蠢的我...我修复了在同一 JOIN 行中写入第二个条件的问题。 因此,以下 JOIN:

$this->db->join('tbl_infos', 'tbl_images.id = tbl_infos.id', 'left');

变成:

$this->db->join('tbl_infos', 'tbl_images.id = tbl_infos.id AND tbl_infos.lang = "en"', 'left');
© www.soinside.com 2019 - 2024. All rights reserved.