Php 如何将具有相同值的列保存到数据库?
我想将两种值保存到数据库中。第一栏是“学科”,第二栏是“教师”。对于一门学科,有许多不同的教师姓名。例如,我如何将“约翰”、“玛丽”、“汤姆”、“莉娜”与“数学”科目相加Php 如何将具有相同值的列保存到数据库?,php,sql,arrays,database,Php,Sql,Arrays,Database,我想将两种值保存到数据库中。第一栏是“学科”,第二栏是“教师”。对于一门学科,有许多不同的教师姓名。例如,我如何将“约翰”、“玛丽”、“汤姆”、“莉娜”与“数学”科目相加 您需要实现一对多关系。一个科目可以有多个教师,而一个教师可以属于多个科目 教师表可以如下所示: CREATE TABLE teachers ( id int NOT NULL AUTO_INCREMENT, teacher varchar(255), subject_id int ) 主题表如下所示
您需要实现一对多关系。一个科目可以有多个教师,而一个教师可以属于多个科目 教师表可以如下所示:
CREATE TABLE teachers (
id int NOT NULL AUTO_INCREMENT,
teacher varchar(255),
subject_id int
)
主题表如下所示:
CREATE TABLE subjects (
id int NOT NULL AUTO_INCREMENT,
subject varchar(255),
)
现在,有了这个关系,您就可以连接这两个表以获得所需的内容
SELECT * FROM subjects s LEFT JOIN teachers t on s.id = t.subject_id
这种方法相当标准,在某种程度上可以规范化数据库
我建议您阅读一些关于人际关系的文章,虽然我推荐的文章大多是google-d,但我相信您可以找到一些更复杂的:
另请阅读有关数据库原子性的内容-如果
$math
是一个包含名称的数组,则可以使用foreach将它们像这样插入数据库中
$pdo = new PDO('mysql:host=localhost;dbname=school', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO teacher (name,subject) VALUES (?,?)";
try {
$stmt = $conn->prepare($sql);
foreach ($subject as $i => $subjects) {
$stmt->execute([$subjects, $math[$i]]);
}
} catch (\PDOException $e)
规范化要求每一行都应该是一个科目(或科目id)的教师名称(或id)。因此,如果你想让John教授3门学科,他必须在你的表格中输入3次,如果你有3位教授数学的老师,所有3位老师都必须有单独的行。分别插入与该学科配对的每位老师,使用可以使用循环,只需准备一次。不建议在同一行中为一列存储多个值。可以o这里是插入多个带有主题的条目,并为其指定一个名称。这样,如果要检索主题的所有名称,可以轻松检索。请注意,如果要插入数千行,使用循环并执行每一行是不切实际的,最好创建一个准备好的状态t(尽管它比您现在拥有的要复杂一点)
$pdo = new PDO('mysql:host=localhost;dbname=school', 'root', '');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "INSERT INTO teacher (name,subject) VALUES (?,?)";
try {
$stmt = $conn->prepare($sql);
foreach ($subject as $i => $subjects) {
$stmt->execute([$subjects, $math[$i]]);
}
} catch (\PDOException $e)