2017-03-16 14 views
-1

だから基本的には、ユーザーが入力し、学生のID、姓、名、教師のファーストネームと教師の姓つもり別のテーブルに挿入します。先生の名字に対応するIDを取得したい。ここで つのテーブルからIDを取得し、

は私のコードです:

$get_teacher = mysqli_query($link, "SELECT id FROM teachers WHERE first_name = '$teacher_first_name' AND last_name = '$teacher_last_name'"); 

$get_teacher_arr = mysqli_fetch_array($get_teacher); 

$result = mysqli_query($link, "INSERT INTO students (student_id, first_name, last_name, teacher_id) VALUES ('$student_id', '$first_name', '$last_name', '$get_teacher_arr[0]');"); 

答えて

1

は1つのクエリでそれを行う

INSERT INTO students (student_id, first_name, last_name, teacher_id) 
SELECT $student_id, '$first_name', '$last_name', id 
FROM teachers 
WHERE first_name = '$teacher_first_name' 
AND last_name = '$teacher_last_name' 
0

Doが1つのクエリでこれを行うことができます:

INSERT INTO students (student_id, first_name, last_name, teacher_id) 
    SELECT $student_id, t.id, t.first_name, t.last_name 
    FROM teachers t 
    WHERE first_name = '$teacher_first_name' AND last_name = '$teacher_last_name'; 

最初のノート:使用しないでください変数文字列に詰め込まれています。クエリでパラメータを使用する方法を学びます。 mysqli_を使用しているので、これが正しい方法です。

2番目の注記:生徒の名前も含めてください。あなたは更新を使ってそれを行うことができます。

サード注:studentsテーブルに教師の名前を繰り返さないでください。データベースを正規化して別個のエンティティを持つ主な理由は、同じデータを複数の場所に格納しないようにするためです。したがって、クエリは次のようになります。

INSERT INTO students (student_id, teacher_id) 
    SELECT ?, t.id 
    FROM teachers t 
    WHERE first_name = ? AND last_name = ?; 

次に、JOINを使用して先生の名前を取得できます。 3テーブルの上に

0

問合せ:

SELECT s.first_name, 
     t.id_tea 
FROM (student s 
     INNER JOIN st_te st ON s.id_stu = st.id_stu) 
INNER JOIN teacher t ON st.id_tea = t.id_tea; 

3表:

student     st-te     teacher 
id_stu first_name  id id_stu id_tea  id_tea first_name 
1  John    1 1  1   1  Asher 
2  Elsa    2 2  2   2  Lea 

クエリ出力:

first_name  id_tea 
John   1 
Elsa   2 

すべてのデータベースのためのSQLとテーブル:

CREATE DATABASE student_teacher; 
CREATE TABLE student (id_stu INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(10)); 
CREATE TABLE teacher (id_tea INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(10)); 
CREATE TABLE st_te (id int AUTO_INCREMENT PRIMARY KEY, id_stu INT, id_tea INT); 
関連する問題