參考資料:http://www.w3schools.com/sql/sql_join.asp
我們切換到新的分支進(jìn)行開(kāi)發(fā)
git checkout -b joins
為了方便错览,我們把前面模型關(guān)聯(lián)起別名去掉
添加路由
left_join
錯(cuò)誤示例
-
動(dòng)作代碼:
-
視圖代碼
-
頁(yè)面效果
-
控制臺(tái)信息
錯(cuò)誤修改二
如下狞洋,兩張表的主鍵都是id啦吧,不是ID這個(gè)先修改過(guò)來(lái);原因的關(guān)鍵是我們把joins時(shí)候給posts表起別名p這部分去掉如下就可以了:
從控制臺(tái)可以看出我們沒(méi)有把關(guān)聯(lián)的post記錄取出來(lái)
正確示例
1璃搜、joins得到的結(jié)果是一個(gè)新的結(jié)果集拖吼,不是users表也不是posts表,而是select得到的所有字段組成的一個(gè)新結(jié)果集合这吻,所以我們?cè)噲D在html中通過(guò)user去訪問(wèn)關(guān)聯(lián)的posts會(huì)出錯(cuò)Unknown column posts.title這樣的錯(cuò)誤吊档。
2、我們joins語(yǔ)句里面給posts表起別名p報(bào)錯(cuò)這是因?yàn)橥倥矗覀冊(cè)诤竺娴膕elect和where語(yǔ)句里面還是使用posts而不是p這個(gè)別名怠硼,所以去掉別名就正確了。在joins里面使用別名要注意:所以使用到表名的地方移怯,有別名就只能使用別名香璃,不能再使用原來(lái)的名字了。
-
如下就是正確的示例:
如上舟误,我們就把所有的用戶取出來(lái)
我們先添加一條沒(méi)有微博的用戶記錄如下:
如上葡秒,我們left join使用了別名。left join就是把左邊所有的用戶都取出來(lái)嵌溢,不管他有沒(méi)有微博眯牧,然后右邊則是只取出用戶對(duì)應(yīng)的微博,沒(méi)有就不取出來(lái)赖草。所以我們頁(yè)面上得到4個(gè)用戶学少,而張三有3條微博,趙六沒(méi)有微博秧骑。所以結(jié)果上所有用戶都有版确,但是id為5的微博沒(méi)有顯示。
使用where關(guān)鍵字過(guò)濾結(jié)果
是對(duì)新的結(jié)果集進(jìn)行過(guò)濾腿堤,上面我們得到六條結(jié)果,然后對(duì)結(jié)果過(guò)濾后只剩下4條結(jié)果(不再取出所有用戶如暖,得到的結(jié)果是取出所有用戶笆檀,但是使用where過(guò)濾后就不是原來(lái)那樣子了)
提交到git倉(cāng)庫(kù)
進(jìn)入項(xiàng)目根目錄
.../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