PHP7 入門研習

13-3 同時讀取兩個資料表

  1. 別鬧了,秀出uid編號哪裡知道是誰呢?連自己編號多少可能都不清楚了啊!
  2. 沒錯,不過,我們報名的資料表並沒有儲存姓名(這不是偷懶,是資料庫的正規化),所以,無法直接秀出姓名
  3. 但我們可以利用 join 的功能,同時讀兩個表,順便取得姓名或其他資料。

一、用join一次讀兩個以上的資料表

  1. 關聯資料表方便的地方就是:一次可以讀取兩個以上的資料表,簡易語法如下:
    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 ….
    
  2. 「left join」代表以左邊為主,順便到右邊撈撈看有無指定的資料。
  3. 「right join」代表以右邊為主,順便到左邊撈撈看有無指定的資料。
  4. 「join」代表兩邊都要同時有資料,否則該筆資料不會出現。
  5. 以本例而言,讀出報名者編號,順便讀出報名者資料的寫法:
    SELECT a.*, b.* FROM `signups` AS a
    JOIN `users` as b ON a.`uid` = b.`uid`
    WHERE a.`action_id` = '{$action_id}'
  6. 此處用 join,表示一定要有會員資料,否則就不秀出來。

二、修改樣板

  1. 修改 \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}