0

次のデータベース構造があります。

ID | Name | Marks

スクリプトにレコードを挿入しようとしていPHPます。レコードが存在しない場合は、新しいレコードを作成しています。存在する場合は、マーク列を新しいマークと連結しています。

$strSQL = "Replace into student set ID = '".$id."', 
                 name = '".$name."', marks= CONCAT_WS(',',Marks,'".$marks."')";

クエリは正常に実行されていますが、concat は機能していません。古いレコードは新しいレコードによって上書きされています。私もやってみCONCATました。

ありがとう

4

1 に答える 1

1

これを処理する適切な方法は、学生 ID とマークを保持する別の正規化されたテーブルを使用することです。INSERT IGNORE学生情報をテーブルに挿入してから、学生ごとに複数の行で表にstudentマークを挿入するために使用します。marksこれにより、テーブルに追加された各マークとともに日付やその他の情報 (どのコースに属しているかなど) を保存することもできます。通常、行の作成に使用することはお勧めしませんINSERT IGNOREが、行が存在するかどうかを最初にコードで確認し、存在しない場合にのみ挿入することに注意してください。

CREATE TABLE marks (
   markID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
   studentID INT NOT NULL,
   mark VARCHAR() NOT NULL,
   markdate DATETIME NOT NULL
);

/* First execute the insert, which will ignore errors if it already exists */
INSERT IGNORE INTO student (ID, name) VALUES ($id, '$name');

/* Then insert the new marks. Loop to add as many new marks as needed */
INSERT INTO marks (studentID, mark, markdate) VALUES ($id, '$marks', NOW());
于 2012-06-22T01:44:36.323 に答える