参考资料:http://www.w3schools.com/sql/sql_join.asp
我们切换到新的分支进行开发
git checkout -b joins
为了方便,我们把前面模型关联起别名去掉
添加路由
left_join
错误示例
-
动作代码:
-
视图代码
-
页面效果
-
控制台信息
错误修改二
如下,两张表的主键都是id,不是ID这个先修改过来;原因的关键是我们把joins时候给posts表起别名p这部分去掉如下就可以了:
从控制台可以看出我们没有把关联的post记录取出来
正确示例
1、joins得到的结果是一个新的结果集,不是users表也不是posts表,而是select得到的所有字段组成的一个新结果集合,所以我们试图在html中通过user去访问关联的posts会出错Unknown column posts.title这样的错误。
2、我们joins语句里面给posts表起别名p报错这是因为,我们在后面的select和where语句里面还是使用posts而不是p这个别名,所以去掉别名就正确了。在joins里面使用别名要注意:所以使用到表名的地方,有别名就只能使用别名,不能再使用原来的名字了。
-
如下就是正确的示例:
如上,我们就把所有的用户取出来
我们先添加一条没有微博的用户记录如下:
如上,我们left join使用了别名。left join就是把左边所有的用户都取出来,不管他有没有微博,然后右边则是只取出用户对应的微博,没有就不取出来。所以我们页面上得到4个用户,而张三有3条微博,赵六没有微博。所以结果上所有用户都有,但是id为5的微博没有显示。
使用where关键字过滤结果
是对新的结果集进行过滤,上面我们得到六条结果,然后对结果过滤后只剩下4条结果(不再取出所有用户,得到的结果是取出所有用户,但是使用where过滤后就不是原来那样子了)
提交到git仓库
进入项目根目录
.../active_record_second# git add .
git commit -m "left_join"
git push -u https://github.com/xiaohuacc/active_record_second.git joins
合并到主分支
git checkout master
git merge joins
网友评论