13-3
同時讀取兩個資料表
- 別鬧了,秀出uid編號哪裡知道是誰呢?連自己編號多少可能都不清楚了啊!
- 沒錯,不過,我們報名的資料表並沒有儲存姓名(這不是偷懶,是資料庫的正規化),所以,無法直接秀出姓名
- 但我們可以利用 join 的功能,同時讀兩個表,順便取得姓名或其他資料。
一、用join一次讀兩個以上的資料表
- 關聯資料表方便的地方就是:一次可以讀取兩個以上的資料表,簡易語法如下:
SELECT a.* , b.* , c.*
FROM `資料表1` as a
JOIN `資料表2` as b ON a.`索引欄位`= b.`索引欄位`
JOIN `資料表3` as c ON b.`索引欄位`= c.`索引欄位`
WHERE a.欄位='值' AND ….
- 「left join」代表以左邊為主,順便到右邊撈撈看有無指定的資料。
- 「right join」代表以右邊為主,順便到左邊撈撈看有無指定的資料。
- 「join」代表兩邊都要同時有資料,否則該筆資料不會出現。
- 以本例而言,讀出報名者編號,順便讀出報名者資料的寫法:
SELECT a.*, b.* FROM `signups` AS a
JOIN `users` as b ON a.`uid` = b.`uid`
WHERE a.`action_id` = '{$action_id}'
- 此處用 join,表示一定要有會員資料,否則就不秀出來。
二、修改樣板
- 修改 \templates\side_signups.tpl 把 uid 改成 name就可以了,這裡順便加上 Email
{if $op=="show_action"}
<h2>已報名名單</h2>
<table class="table table-hover table-striped">
<thead>
<tr class="info">
<th>姓名</th>
<th>Email</th>
</tr>
</thead>
<tbody>
{foreach $signups as $signup}
<tr>
<td>{$signup.name}</td>
<td>{$signup.email}</td>
</tr>
{/foreach}
</tbody>
</table>
{/if}