0

私は教室のウェブサイトを開発しています。

学生のプロファイル/データをデータベース テーブルに挿入するためのフォームがありますstudent

このサイトには 5 つのクラス グループがあり、ID はid= 1, 2, 3, 4, 5です。

データベース テーブルへのデータの挿入は成功します。

しかし、質問があります。各生徒は教室1 and 2の下にいる必要があるため、データを挿入するときは、毎回 2 つのデータベース結果を自動的に作成するデータベースが必要です。両方の結果のすべてのフィールドは を除いて同じデータですclassgroup_id。、私はmysqlが各学生を追加するときにこれを自動的に生成する必要があります...何か考えはありますかclassgroup_id=1?classgroup_id=2

これは私のテーブル構造です

  • Student_id (整数) AI
  • 名前
  • Eメール
  • classgroup_id (デフォルト値 = 1)
  • ユーザーID

これはテーブルにデータを挿入するための私のPHPコードです

$this->db->query("INSERT INTO " . DB_PREFIX . "student SET user_id = '" . (int)$this->user->getId() . "', name = '" . $this->db->escape($data['name']) . "',  email = '" . $this->db->escape($data['email']) . "'");

ありがとう...私は中レベルのPHP知識しか持っていません

4

4 に答える 4

1

これを行うためにPHPは必要ありません...純粋なSQL疑似ソリューション:

INSERT INTO student (student_id name, email) SELECT name, email from student where classgroup_id = ?

フィドルを作成し、そのフィドルの場所についてコメントを残していただければ、特定のニーズに合わせてクエリを微調整させていただきます。

于 2013-04-04T07:44:23.370 に答える
1

ClassGroups はテーブルにありますか、それとも単に静的な番号ですか?

それらが単なる静的な数値である場合、最も簡単な方法は、重複したデータで別の挿入を行うことだと思います。たとえば、両方の行は次のようになります。

$this->db->query("INSERT INTO " . DB_PREFIX . "student SET user_id = '" . (int)$this->user->getId() . "', name = '" . $this->db->escape($data['name']) . "',  email = '" . $this->db->escape($data['email']) . "'");

$this->db->query("INSERT INTO " . DB_PREFIX . "student SET user_id = '" . (int)$this->user->getId() . "', name = '" . $this->db->escape($data['name']) . "',  email = '" . $this->db->escape($data['email']) . "', classgroup_id =2");

それらがいくつかのテーブルにある場合、1つの挿入で挿入できますが(コードは短くなります)、挿入構文はあなたのものとは異なります。たとえば、ClassGroup テーブルは単なる ClassGroups です。

$this->db->query("INSERT INTO " . DB_PREFIX . "student (user_id, name, email, ClassGroup_id)
select " . (int)$this->user->getId() . ", '" . $this->db->escape($data['name']) . "',  '" . $this->db->escape($data['email']) . "',ClassGroup_id from ClassGroups where ClassGroup_id=1 or ClassGroup_id=2");

しかし、データ(学生、クラスグループ)ごとに異なるテーブルを作成し、それらの関係テーブルを作成するのが最善だと思います。データを複製せず、データをプライマリAIキーで収集するのではなく、データを収集すると学生のテーブルが高速になりますvarchar 型の列名で。

于 2013-04-04T08:34:15.107 に答える