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)