(03)joins

参考资料:http://www.w3schools.com/sql/sql_join.asp

我们切换到新的分支进行开发

git checkout -b joins
(03)joins_第1张图片
(03)joins_第2张图片

为了方便,我们把前面模型关联起别名去掉


(03)joins_第3张图片

添加路由

(03)joins_第4张图片

left_join

错误示例
  • 动作代码:


  • 视图代码


    (03)joins_第5张图片
  • 页面效果


    (03)joins_第6张图片
  • 控制台信息


    (03)joins_第7张图片
错误修改二

如下,两张表的主键都是id,不是ID这个先修改过来;原因的关键是我们把joins时候给posts表起别名p这部分去掉如下就可以了:


(03)joins_第8张图片
(03)joins_第9张图片

从控制台可以看出我们没有把关联的post记录取出来

正确示例

1、joins得到的结果是一个新的结果集,不是users表也不是posts表,而是select得到的所有字段组成的一个新结果集合,所以我们试图在html中通过user去访问关联的posts会出错Unknown column posts.title这样的错误。
2、我们joins语句里面给posts表起别名p报错这是因为,我们在后面的select和where语句里面还是使用posts而不是p这个别名,所以去掉别名就正确了。在joins里面使用别名要注意:所以使用到表名的地方,有别名就只能使用别名,不能再使用原来的名字了。

  • 如下就是正确的示例:
    如上,我们就把所有的用户取出来
    我们先添加一条没有微博的用户记录如下:


    (03)joins_第10张图片
(03)joins_第11张图片

如上,我们left join使用了别名。left join就是把左边所有的用户都取出来,不管他有没有微博,然后右边则是只取出用户对应的微博,没有就不取出来。所以我们页面上得到4个用户,而张三有3条微博,赵六没有微博。所以结果上所有用户都有,但是id为5的微博没有显示。

使用where关键字过滤结果
是对新的结果集进行过滤,上面我们得到六条结果,然后对结果过滤后只剩下4条结果(不再取出所有用户,得到的结果是取出所有用户,但是使用where过滤后就不是原来那样子了)


(03)joins_第12张图片
(03)joins_第13张图片

提交到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

你可能感兴趣的:((03)joins)