我有以下数据库结构。
ID | Name | Marks
我正在尝试在PHP
脚本中插入记录。如果记录不存在,我将创建一条新记录。如果确实存在,我将标记列与新标记连接起来。
$strSQL = "Replace into student set ID = '".$id."',
name = '".$name."', marks= CONCAT_WS(',',Marks,'".$marks."')";
查询运行正常,但concat无效。旧记录正在覆盖旧记录。我也试过了CONCAT
。
由于
答案 0 :(得分: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());