我有一个这样的表:
+--------+---------------+--------------+---------------+
| id | firstname | lastname | foods |
+--------+---------------+--------------+---------------+
| 1 | James | Bonds | BBQ |
| 2 | James | Bonds | Hamburger |
| 3 | James | Bonds | Pizza |
| 4 | David | Smith | BBQ |
| 5 | David | Smith | Pizza |
+--------+---------------+--------------+---------------+
这是我插入数据库时的代码:
if($_POST["Submit"]=="Submit"){
for ($i=0; $i<sizeof($checkbox);$i++){
$sql="INSERT INTO tbl_info VALUES ('NULL', '$fname','$lname', '".$checkbox[$i]."')";
$result=mysql_query($sql);
}
}
或者是否可以这样:
+--------+---------------+--------------+---------------+
| id | firstname | lastname | foods |
+--------+---------------+--------------+---------------+
| 1 | James | Bonds | BBQ |
| 1 | James | Bonds | Hamburger |
| 1 | James | Bonds | Pizza |
| 2 | David | Smith | BBQ |
| 2 | David | Smith | Pizza |
+--------+---------------+--------------+---------------+
'foods' 列是一个复选框值,因此它是多余的(如果用户选择了 10 个复选框值,它也会产生 10 行具有相同名字的行等等)。
问题是如果我需要改变用户的信息,我必须一个一个地改变它,这是错误的。如果我要删除用户信息,培训列值也应该一次删除。(我不能使用 implode 或 explode)。 对不起。 PHP 新手。
提前致谢。
最佳答案
你应该有三个表:
Person Table (person_id, firstname, lastname)
Food Table (food_id, name)
PersonFood Table (person_id, food_id)
插入记录时,将人员详细信息输入人员表。将食物详细信息存储在食物表中。当一个人喜欢某种食物时,在 PersonFood 表中添加一条记录,其中将包含 person_id 和 food_id。这样,当一个人的详细信息发生变化时,只需要更改人员表中的记录即可。 检索结果时,您可以进行连接查询。
这种规范化形式称为Third normal form
关于php - 归一化表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14016555/