You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在CodeIgniter中通过SELECT查询获取MySQL两张表的全部记录

嘿,这个需求得看你两张表的关系来选合适的方案,我给你分两种常见场景详细说下CodeIgniter里的实现方式:

场景1:两张表无关联,需要合并所有记录

如果users和employers是完全独立的表(比如分别存普通用户和企业用户,没有关联字段),想要把两张表的所有记录合并成一个结果集,那得用UNION或者UNION ALL。

注意:UNION会自动去重重复的记录,而UNION ALL只是简单合并,性能更好,如果你不需要去重优先用它。另外,两张表的查询结果列数必须一致,对应列的类型要兼容,要是列数不一样,得用NULL来补全缺失的列。

用CodeIgniter Query Builder实现

// 先查users表,给employers独有的列补NULL(比如company_name)
$this->db->select('id, name, email, NULL AS company_name');
$this->db->from('users');
// 用union_all()代替union()可以跳过去重,提升性能
$this->db->union_all();
// 再查employers表,对应列要和前面的查询匹配
$this->db->select('id, name, email, company_name');
$this->db->from('employers');

// 执行查询并获取结果
$query = $this->db->get();
$all_records = $query->result(); // 返回对象数组,用result_array()返回关联数组

用原生SQL实现

如果Query Builder写起来麻烦,直接用原生SQL更灵活:

$sql = "
    SELECT id, name, email, NULL AS company_name FROM users
    UNION ALL
    SELECT id, name, email, company_name FROM employers
";
$query = $this->db->query($sql);
$all_records = $query->result();
场景2:两张表有关联,需要关联查询记录

如果users和employers之间有关联字段(比如employers表有user_id关联users表的id),想要获取关联在一起的记录,就用JOIN查询,常见的有LEFT JOIN(保留users表所有记录,即使没有对应的employer)和INNER JOIN(只返回两边都有匹配的记录)。

用CodeIgniter Query Builder实现

// 建议指定具体列,避免重复列名(比如两张表都有id的话,会被覆盖)
$this->db->select('users.id AS user_id, users.name AS user_name, users.email, employers.id AS employer_id, employers.company_name');
$this->db->from('users');
// 第三个参数'left'表示左连接,换成'inner'就是内连接
$this->db->join('employers', 'users.id = employers.user_id', 'left');

$query = $this->db->get();
$related_records = $query->result();

用原生SQL实现

$sql = "
    SELECT 
        users.id AS user_id, 
        users.name AS user_name, 
        users.email, 
        employers.id AS employer_id, 
        employers.company_name
    FROM users
    LEFT JOIN employers ON users.id = employers.user_id
";
$query = $this->db->query($sql);
$related_records = $query->result();
额外注意点
  • 如果两张表有同名的字段(比如id),一定要给列加别名,否则结果里后面的列会覆盖前面的,导致数据错误。
  • 用Query Builder的好处是自动处理SQL注入,原生SQL如果要加参数的话,记得用$this->db->escape()或者绑定参数的方式,避免注入风险。

内容的提问来源于stack exchange,提问作者amit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:28:38