今天誤會自己斷賽了,緊張慘了,後來才想起來昨日有發文。好拉!前面都是題外話,今天會跟大家介紹Select()、from()以及join()這三個在SQL都是很基本的東西。本來期望把where()一起殺掉,看來是沒辦法,雖然是簡單的東西,但~是很基本(必知?),所以不能忽略、帶過它,只好再另闢新章(?)。
Select()
CI做查詢時是可以做到只撈特定欄位出來的,此時,只要將select()下在查詢語法前面並指定欄位即可,代碼如下:
$this->db->select('title, content, date');
$query = $this->db->get('mytable');
// SELECT title, content, date FROM mytable
select_max()
select_max()等同於資料庫指令「SELECT MAX(欄位) FROM TABLE」,通常彙總欄位都會另外取名字,畢竟~計算前與計算後的名稱相同容易混淆。以下為User Guide的範例:
$this->db->select_max('age');
$query = $this->db->get('members');
// 產生: SELECT MAX(age) as age FROM members
$this->db->select_max('age', 'member_age');
$query = $this->db->get('members');
// 產生: SELECT MAX(age) as member_age FROM members
依此類推的其他彙總形式
//最小值
$this->db->select_min('age');
$query = $this->db->get('members');
//平均值
$this->db->select_avg('age');
$query = $this->db->get('members');
//加總
$this->db->select_sum('age');
$query = $this->db->get('members');
get()及get_where()中已經包含來源Table了,from()不免讓初學者質疑存在的必要。若查詢結果需要來自多個表(JOIN)或者條件較為複雜(where)時,get()及get_where()無法達到需求,此時就只能用from()了!form()本身不複雜,只需要傳入Table即可,user guide提供的例子也很簡單:
$this->db->select('title, content, date');
$this->db->from('mytable');
$query = $this->db->get();
實務上很少會有網站、需求全部都是非常單純的單表查詢,某些查詢結果是將多張表的結果關聯後撈出來。不能直接下語法的話又該如何做到JOIN呢?
基本JOIN使用
SQL:
SELECT * FROM blogs
JOIN comments ON comments.id = blogs.id
CI:
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$query = $this->db->get();
斯斯有三種,JOIN的型態也很多種
除了學生可能比較不熟悉外,對SQL有語法的人多少都知道JOIN有很多種:left、right、outer、inner、left outer 以及 right outer 。CI也能做到,在JOIN的第三個參數設置,代碼:
SQL:
SELECT * FROM blogs
LEFT JOIN comments ON comments.id = blogs.id
CI:
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id', 'left');
$query = $this->db->get();
今天在這裡把Select()做個結束,Where()的東西滿多的,在這邊延伸在這邊一起帶完太牽強了,所以在這裡先讓Select做個落幕,謝謝閱讀者的支持。