2017-09-30 28 views
1

私はMySQLデータベースを作成しています。私はそれが新しいので、私は問題に直面している理由です。問題は、親テーブルを参照している外部キーを子テーブルに取り込むことです。私が持っている二つのテーブル次の列子テーブルに外部キーを設定する方法 - MySql

  • 主キーとしてIDが含まれているemployee
  • first_nameの
  • last_nameの
  • Birth_Dateの

およびはの主キーidを参照している外部キー

  • ブック
  • として、次の列

    • REF
    • 主キー
    • としてemployIdが含まれていますテーブル employeeテーブル。つまり、同じIDを持つ従業員が複数の書籍を借りることができるということです。いくつかのデータを従業員表に挿入すると、挿入されますが、借用した表にデータを挿入する必要がある場合、employeeId列に値を手動で挿入する必要があります。それは自動的に設定されていないと思いますか?または私は外来キーの概念を誤解しています。私は必要なもの

      マイSQLコード

      $uname = "root"; 
       
          $pass = ""; 
       
          $sname ="localhost"; 
       
          $db ="nady"; 
       
          //Making database connection 
       
          $con = mysqli_connect($sname,$uname,$pass,$db); 
       
      
       
      $t1 = "CREATE TABLE IF NOT EXISTS employee (
       
      \t id smallint(5) unsigned AUTO_INCREMENT NOT NULL, 
       
      \t firstname varchar(30), 
       
      \t lastname varchar(30), 
       
      \t birthdate date, 
       
      \t PRIMARY KEY (id) 
       
      ) ENGINE=InnoDB"; 
       
      $con->query($t1); 
       
      
       
      
       
      
       
      $t2 = "CREATE TABLE IF NOT EXISTS borrowed (
       
      \t ref int(10) unsigned NOT NULL auto_increment, 
       
      \t employeeid smallint(5) unsigned NOT NULL, 
       
      \t book varchar(50), 
       
      \t PRIMARY KEY (ref), 
       
      \t FOREIGN KEY (employeeid) REFERENCES employee(id) ON UPDATE CASCADE ON DELETE CASCADE 
       
      ) ENGINE=InnoDB"; 
       
      $con->query($t2); 
       
      if(!$con->query($t2)){ 
       
      \t echo $con->error; 
       
      } 
       
      
       
      
       
      $i1 = "INSERT INTO employee VALUES(NULL,\"Nadeem\",\"Ahmad\",22)"; 
       
      $con->query($i1); 
       
      
       
      $i2 = "INSERT INTO borrowed VALUES(NULL,1,\"Ahmad\")"; 
       
      $con->query($i2); 
       
      if(!$con->query($i2)){ 
       
      \t echo $con->error; 
       
      }

      シンプル。たとえば、IDが、従業員がの従業員。 3冊の本を借りた人したがって、借用したテーブルでは、employeeId列には、の値を持つ3つの行があり、帳簿名は異なります。私の要点は、employeeId列にデータを挿入するときにemployeeId列をどのように設定するかです。例えば、Johnは3冊の本を借りて、id 1を持っているとしたら、ジョンの従業員IDで借用したテーブルにデータを挿入する方法を教えてください。私はそれのためのクエリが必要です。また、johnが借りている書籍を検索するためのクエリを実行します。

    +0

    借り手の従業員IDは、従業員が借りた本のIDとともに、借りる人のフォームを使用します。 – Shadow

    +0

    @Shadow私はフォームを通してそれを設定する必要があります。この人物のIDが1か2か3かなどはどのように分かりますか – Nadeem

    +0

    IDと従業員の名前を照会します。 – Shadow

    答えて

    2

    外部キー(あなたのケースでborrowedからemployId)カラム のフィールドが別のテーブル(employeeからid)の主キーを指すことを示す、2つのテーブルをリンクするために使用されます。

    borrowedに新しい行を挿入するときは、その行を挿入するユーザーをその行に挿入する必要があります。あなたはそれをやっているユーザーを知る必要があります。外部キーを持っている場合は、そのユーザーのIDが必要です。このIDは、固有の識別子です。ジョンが本を取ったことを挿入するには、ジョンのIDが1であることを知る必要があります。ユーザーがemployeeテーブルにすでに存在すると、あなたは彼の最初と最後の名前を知っている場合は、あなたが選択し、簡単な...

    SELECT id FROM employee WHERE first_name='John' AND last_name='Smith' 
    

    でIDを取得することができます

    ...そしてあなたが行うことができます得られたIDで挿入します。

    それは新しいユーザーの場合は、新しいIDを取得、その後、employeeへの最初のユーザーを追加し、次にborrowedに新しい行を挿入し、新しいIDを取得するためにemployeeテーブルに再クエリすることなくこれを行うにする必要がありますPHP mysqli::$insert_id/mysqli_insert_id関数を使用して、最後のクエリのPRIMARYキーを得ることができます。たとえば...

    $con->query("INSERT INTO employee (first_name,last_name) VALUES ('Mark','Whatever')"); 
    $newemployeeid = $con->insert_id; 
    $con->query("INSERT INTO borrowed (employeeid,book) VALUES (".$newemployeeid.",'Awesome Book Title')"); 
    

    は、私はあなただけのこれらの行を変更する必要があることが

    +0

    ありがとう、それは私のために働いた! – Nadeem

    +0

    よろしくお願いします!良い一日と幸せなコーディングを! –

    1

    役に立てば幸い

    $ EMPLOYEE_ID = $コン> INSERT_ID。

    $ I2 = "借りVALUES。INSERT INTO(NULL、"。$のEMPLOYEE_ID。 "\" アフマド\ ")"

    まず、あなたはその後、inser_id mysqlの事前に定義された関数を使用して$ EMPLOYEE_IDとして最後のインサートIDを取得この$ employee_idを借用テーブルの挿入クエリに追加します。

    +0

    ありがとうございました@それは私のために働いた – Nadeem

    +0

    素晴らしい。がんばり続ける。 – sheraz