# データベース設計とリレーションについて ## 授業資料 [ダウンロードリンク](https://drive.google.com/drive/u/1/folders/1FhLRMW0I85497bdS1yKf8nSF1BqweODw) ## 1章:環境準備(DBの準備) ### まずはphpMyAdminを開いて授業用のDBを作成する #### 1. MAMPを起動 #### 2. WebStartボタンから起動トップページを表示 #### 3. ページの真ん中MySQLのタブからphpMyAdminのリンクをクリック #### 4. 起動した画面がMySQLを管理するphpMyAdminの画面が表示されます。 #### 5. データベースタブをクリック #### 6. データベースを作成から以下の名前で作成 ``` データベース名:gs_db6 照合順序:utf8_unicode_ci ``` #### 7. 作成ボタンをクリック 左側にgs_db6というデータベースができていると思います。 現在は空っぽです。 ### SQLファイルからインポートしてみよう 〇〇.sqlというSQLファイルをインポートしてデータを作成します。 #### 1. gs_db6を選択した状態でインポートタブをクリック #### 2. ファイルを選択をクリックして配布した資料内のSQLフォルダ内のgs_db6.sqlを選択 #### 3. 実行する #### 4. 今日の授業用DB完成 ## 2章:投稿者が判別できるアンケートシステムの構築 ### データベースに1対多のリレーションを組む為のカラムを追加する #### 1. gs_db6を選択した状態でgs_an_tableをクリック #### 2. gs_an_tableを選択した状態で構造タブをクリック #### 3. 中段あたりにあるカラム追加フォームからカラムを追加 `1個のカラムを追加するidの後へ`で実行 #### 4. カラムを追加 ``` user_id int(10) ``` #### 5. 事前に登録済みのデータのuser_idは全て0になっているので1~3の任意の数字に変更 #### 6. gs_user_tableのnameの部分をuser_nameに変更 ### データ登録時のログインユーザーidを保存する処理を追加 #### 1. insert.phpでまずはログインユーザーのidを取得 ``` <?php session_start();//追記!!! //1. POSTデータ取得 省略 //ログインユーザーidを取得 $user_id = $_SESSION["user_id"]; ``` #### 2. insert.phpのSQLを変更 ``` INSERT INTO gs_an_table(user_id,name,email,naiyou,indate)VALUES(:user_id,:name,:email,:naiyou,sysdate()) ``` bind変数も追加 ``` $stmt->bindValue(':user_id', $user_id, PDO::PARAM_INT); //Integer(数値の場合 PDO::PARAM_INT) ``` #### 3.実際にformからデータ登録してデータベースに保存されているかチェック 別のアカウントでもログインして2~3個ほどデータを登録 ### アンケート一覧で投稿者名を横に表示する(リレーション先のデータ取得) #### 1.Select.php のSQL文をアップデート ``` SELECT * FROM gs_an_table INNER JOIN gs_user_table ON gs_an_table.user_id = gs_user_table.id ``` ちなみに文法的には ``` SELECT * FROM 主テーブル INNER JOIN 子テーブル ON 主テーブル.キー = 子テーブル.キー ``` *詳しく知りたい方はこの新卒の子が書いてるQiitaが初心者にわかりやすいのでおすすめ https://qiita.com/SuguruOoki/items/e83da54b6c78cc58e40d #### 2.select.phpに表示処理のwhile文内を編集 ``` $view .= $r["id"]."|".$r["name"]."|".$r["email"]; ``` ↓↓↓↓↓↓↓↓ ``` $view .= $r["id"]."|".$r["name"]."|".$r["email"].$r["user_name"]; ``` #### 3.IDがずれたりしてるので一時対策としてgs_user_tableのidをuser_idに名前変更します。 login_act.phpとinsert.phpでも一部修正