大家好!
多表联查就是要查询的结果是需要获取多个表的内容,把它们的关系建立为一个临时存在的表;
多表联合查询是不可以进行索引优化查询速度的,所以一般情况下不建议使用;
多表联查使用inner join,在这里inner是可以省略的,如下:
比如:
有两个表,一个是父表成绩表 score 字段有id,studentid,mark(分数)
一个为子表学生姓名表 student 字段有id,sname,
查询出成绩大于80的学生有哪些?
select sname from score as sc join student as st on sc.studentid=st.id
on sc.mark>80;
as 起别名调用; on相当于这个表下的字段; sc.studentid就是score表下的studentid;
在TP框架中:
例如:3个表 myrelease(发布) user(用户) image(图片)
查询文章发布表进而对user和image进行查询获取数据
$myrelease = M('myrelease')->field('user.*, myrelease.*')
// 将user表下ID与myrelease下的user_id进行匹配
->join('user on user.id = myrelease.user_id')
->where("myrelease.id=1")
//->where("myrelease.status=0 and myrelease.is_delete=0")
->order("myrelease.id desc")
->select();
foreach ($myrelease as $k => $v) {
// 获取每次循环的id
$myreleaseid = $myrelease[$k]['id'];
// 使用循环遍历把images表中的图片插入myrelease表中,images为2维数组
$myrelease[$k]['images'] = M('images')
->field('imageurl')
->where("my_id = '{$myreleaseid}'")
->select();
}
进而获取数据达到 多表联查