两张数据表关联查询

这篇博客介绍了如何在PHP中进行多表查询,通过model查询将数据从二维数组转换为一维数组,并在foreach中遍历,将Company表中的数据与Customer表关联,将company.name赋值给customer.origin。博主还提到了在处理一维数组时的注意事项,包括引用符号的使用和select、find查询的区别。

笔记一、多表查询
    两张表通过关联字段将一张表的company.name赋值给customer.origin

    我的思路:
        1、使用model查询将数据查询出来,查询结果为数二维组;
            $customer_model = model('Customer');
            $csr_get = $customer_model->get($value['id']);
        2、通过foreach将查讯的结果遍历为一维数组;
            foreach ($csr_all_toArray as $key => $value) {}
        3、将company中的数据通过模型查询出来,然后嵌套在foreach中,再次遍历;
        4、将遍历的数据赋值给$csr_get['origin'];
            $csr_get['origin'] = $origin_res['name']
        5、打印输出结果为一维数组;
            dump($csr_res);
        6、将一维数组转换为二维数组渲染到视图上。

    我的问题:
        一维数组转二维数组

    解决方案:
        使用model查询,将查询结果遍历:
        //获取关联的两张数据表
        $customer_model = model('Customer');
        $company_model = model('Company');
        $csr_all_toArray = $customer_model->select();

        foreach ($csr_all_toArray as &$value){
            $company = $company_model->where('id', $value['origin'])->find();
            $value['origin'] = $company['name'];
        }
        dump($csr_all_toArray);

    注意事项:
        1、引用符号,同指针一样,将变量指向了一个位置,而不是复制了内容。
           引用的意思是:不同的名字访问同一个变量内容。php的引用(就是在变量或者函数、对象等前面加上&符号)。
           $str = '第一个hello world';
           $str2= &$str;
           $str = '第二个hello world';
           echo $str2;
        2、select查询出的是多条数据,需要在模版volist循环打印出来
           find和get获取单条数据,可直接在模版打印,find 方法查询结果不存在,返回 null;
           默认情况下,find和select方法返回的都是数组,elect 方法查询结果不存在,返回空数组

        
 

### 三、联合查询的基本概念 在数据库中,联合查询是指从中提取数据,并根据某些条件将这些数据关联起来。这种查询方式特别适用于数据分布在中,而这些之间存在某种逻辑关系的情况。联合查询的核心在于通过连接条件将不同中的记录匹配起来,从而形成一个完整的数据视图。 在实际应用中,联合查询通常用于处理之间的关联数据。例如,在学生信息和选课成绩中,可以通过学生的唯一标识符(如学号)进行连接,从而获取每个学生的选课成绩信息。这种做法不仅避免了数据冗余,还能确保数据的一致性和完整性。 ### 三、联合查询的实现方式 联合查询的实现通常依赖于SQL中的`JOIN`操作,常见的连接类型包括内连接(INNER JOIN)、左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)和全外连接(FULL OUTER JOIN)。其中,左外连接是最常用的连接方式之一,它保留左中的所有记录,并将右中匹配的记录合并进来。如果没有匹配的记录,右中的字段将显示为NULL。 例如,在学生和选课之间进行左外连接查询时,可以使用以下SQL语句: ```sql SELECT 学生.学号, 姓名, 班级, 课程号, 成绩 FROM 学生 LEFT OUTER JOIN 选课 ON 学生.学号 = 选课.学号; ``` 该查询语句的结果将包含学生中的所有记录,并将选课中与之匹配的记录合并进来。如果某个学生没有选课记录,则选课中的字段将显示为NULL [^3]。 ### 三、使用WHERE子句进行联合查询 除了使用`JOIN`操作,还可以通过`WHERE`子句来实现联合查询。这种方式通常用于简单的连接,尤其是在两个中存在相同字段的情况下。为了避免字段名冲突,查询语句中应使用名或别名来限定字段名。 例如,在学生(student)和学生课程成绩(student_course)之间进行联合查询时,可以使用以下SQL语句: ```sql SELECT student.student_id, student.student_name, student_course.score FROM student, student_course WHERE student.student_id = student_course.student_id AND student_course.course_id = '0001' ORDER BY student_course.score DESC; ``` 该查询语句通过`WHERE`子句指定连接条件,即`student.student_id = student_course.student_id`,并进一步筛选出特定课程(如课程号为'0001')的成绩记录,最后按照成绩从高到低排序 [^4]。 ### 三、插入数据到中 在进行联合查询之前,通常需要先向中插入数据。例如,在`name`和`info`中分别插入记录,可以使用以下SQL语句: ```sql INSERT INTO name (id, name, age) VALUES (1, "张三", "12"); INSERT INTO info (name, address) VALUES ("张三", "秦皇岛市"); ``` 这两条语句分别向`name`和`info`中插入了一条记录。`name`存储了姓名和年龄信息,而`info`存储了姓名和地址信息。通过姓名字段的匹配,可以在这两张之间进行联合查询 [^2]。 ### 三、联合查询的应用场景 联合查询广泛应用于各种数据库管理系统中,特别是在处理复杂数据结构时。例如,在Android开发中,SQLite数据库常用于本地数据存储,当数据结构变得复杂时,通常需要使用进行联合查询。通过主键和外键的关联,可以有效地组织数据,并提高查询效率 [^1]。 此外,联合查询还常用于报生成、数据分析和业务决策支持等场景。通过将中的数据整合在一起,可以提供更全面的信息视图,帮助用户更好地理解数据之间的关系。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值