###やりたいこと
別の質問で、予定表をDBに登録する際にテーブルを切り分けていくので、その共通Idみたいので紐付けなどができるようにしたらどうだろう?ということで、質問しました。
テーブルとしては、大きく予定のテーブルと訪問スタッフのテーブルと二つを用意しました。
では、下記でDBの設計などを記載してみたいと思います。
###DBの設計
MySQL
1[visitPlan] 2plan_id int not null auto_increment primary key, 3plan_user int // user_masterと紐付け 訪問先 4plan_car int // car_masterと紐付け 乗車する車 5plan_time datetime // 訪問日時 6 7[visitPlan_staff] 8plan_id int not null primary key, 9plan_staff int // staff_masterと紐付け 訪問スタッフ
単純に上記のような設計をしております。
スタッフの部分は現在最大3人ですが、場合によっては4人と増えることがまれにある為、切り分けました。
###コード
はじめに、クラスなどは使用せず、フルスクラッチでfunctionばかりを使いながら処理を分けていくやり方をしております。その部分に関してはスルーでお願いいたします。
HTML
1[index.php] 2<form action="" method="post"> 3// ほとんどの項目がselectの為option部分は省略いたします 4<select name="year"></select>年 5<select name="month"></select>月 6<select name="day"></select>日 7<select name="car"></select>号車 8 9<?php for ($i = 0; $i <= 8; $i++) : ?> 10訪問先<select name="user[<?= $i; ?>][name]"></select> 11 時 <select name="user[<?= $i; ?>][hour]"></select> 12 分 <select name="user[<?= $i; ?>][minutes]"></select> 13staffA<select name="user[<?= $i; ?>][A]"></select> 14staffB<select name="user[<?= $i; ?>][B]"></select> 15staffC<select name="user[<?= $i; ?>][C]"></select> 16<?php endfor; ?> 17<input type="submit" name="insert"> 18</form> 19 20<?php if (isset($_POST['insert'])) { plan_insert(); } ?>
PHP
1[controller.php] 2function plan_insert() { 3$users = $_POST['user']; 4foreach ($users as $user) { 5$year = $_POST['year']; 6$month = $_POST['month']; 7$day = $_POST['day']; 8$car = $_POST['car']; 9$name = $user['name']; 10$hour = $user['hour']; 11$minutes = $user['minutes']; 12$second = date('s'); 13$staffA = $user['A']; 14$staffB = $user['B']; 15$staffC = $user['C']; 16 17if ($name == "") { 18// 何もしない 19} else { 20$time = mktime($hour, $minutes, $second, $month, $day, $year); 21$insert_time = date('Y-m-d H:i:s', $time); 22 23$plan_insert = plan_insert_db($name, $car, $insert_time); 24}}}
PHP
1[db.php] 2function plan_insert_db($name, $car, $insert_time) { 3$dbh = connectDb(); 4$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 5$sql = "INSERT INTO visitplan (plan_user, plan_car, plan_time) VALUES (:name, :car, :insert_time)"; 6$stmt = $dbh->prepare($sql); 7$stmt->bindParam(':name', $name, PDO::PARAM_INT); 8$stmt->bindParam(':car', $car, PDO::PARAM_INT); 9$stmt->bindParam(':insert_time', $insert_time, PDO::PARAM_STR); 10$stmt->execute(); 11return $plan_insert;
まずは上記のような流れで登録までの動作は確認しております。
plan_idに関してもauto_incrementなので問題なく入っているのは当たり前ですが、、、、
###質問内容
さて、やっと質問ですが、、、
スタッフ側に登録するという部分において
PHP
1[controller.php] 2if ($name == "") { 3// 何もしない 4} else { 5$time = mktime($hour, $minutes, $second, $month, $day, $year); 6$insert_time = date('Y-m-d H:i:s', $time); 7 8// visitPlanの登録 9$plan_insert = plan_insert_db($name, $car, $insert_time); 10// visitPlan_staffの登録 11$plan_insert_staff = plan_insert_staff_db($staffA, $staffB, $staffC); 12}}}
PHP
1[db.php] 2function plan_insert_staff_db($staffA, $staffB, $staffC) { 3$dbh = connectDb(); 4$dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 5$sql = "INSERT INTO visitplan_staff (plan_id, plan_staff) VALUES (:id, :staff)"; 6$stmt = $dbh->prepare($sql); 7$stmt->bindParam(':staff', $staffA, PDO::PARAM_INT); 8$stmt->execute(); 9$stmt->bindParam(':staff', $staffB, PDO::PARAM_INT); 10$stmt->execute(); 11$stmt->bindParam(':staff', $staffC, PDO::PARAM_INT); 12$stmt->execute(); 13return $plan_insert;
###質問
とりあえず登録という流れまではできましたが、、、
plan側で得たauto_incrementのplan_idをスタッフ側のplan_idに引っ張る方法はどのようになるでしょうか?
plan_insert_db()で登録処理をしてから、そのデータについたIDを持ってきて?
それをどうにかする?
最初から次につくIDを取得してからそれをどうにかする?
最終的には一覧表示する際に
plan_id = 1のデータ
訪問先○○、訪問時間○○:○○、スタッフA、スタッフB、スタッフCという事にしたいのです。
DB的には
plan_id = 1
plan_staff = スタッフA
plan_id = 1
plan_staff = スタッフB
plan_id = 1
plan_staff = スタッフC
という感じでInsertされるイメージですね。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/07 23:56