Php 将所选选项值存储在数据库中
我目前创建了一个数组,如下所示:Php 将所选选项值存储在数据库中,php,mysql,Php,Mysql,我目前创建了一个数组,如下所示: $regions=array( 1=>'North West', 2=>'North East', 3=>'South West', 4=>'South East', 5=>'West Midlands', 6=>'East Midlands', 7=>'London', 8=>'Yorkshire', 9=>'East England'
$regions=array(
1=>'North West',
2=>'North East',
3=>'South West',
4=>'South East',
5=>'West Midlands',
6=>'East Midlands',
7=>'London',
8=>'Yorkshire',
9=>'East England',
10=>'Scotland',
11=>'Wales',
12=>'N. Ireland',
);
我将使用此数组在表单中生成下拉列表选项(值=>text)。所选选项值将存储在数据库中的整数字段中
这可能只是个人偏好的问题,但我只是想知道这是否是正确的方法?或者数组键应该与其值相同吗?当使用这种方法时,是否还会有任何潜在的问题(添加/删除/修改数组)?我倾向于将键值存储在这个实例中。但是,我通常会将区域存储在一个查找表中,在该表中存储id和值,以便使用外键等可以相对轻松地管理将来的任何修改。我倾向于在本例中存储键值。但是,我通常会将区域存储在一个查找表中,在该表中存储id和值,以便使用外键等可以相对轻松地管理将来的任何修改。这通常是正确的,但通常下拉列表(以及数组)是从数据库生成的(至少在某个点,即使稍后缓存)。这样就不会有人更改代码,也不会更改以前存储的值的含义。这通常是正确的,但通常下拉列表(以及数组)是从数据库生成的(至少在某一点上,即使稍后缓存)。这样,就不会有人更改代码,也不会更改以前存储的值的含义。MySQL的一个优点是它直接支持枚举字段类型。IMHO使用有效数据而不是替代值是无限可取的 关于这一点,数据库界有一些争论——谷歌很快找到了82000个“关系数据库枚举类型”的匹配项。去读一些 但那些不同意将其作为一种实践的人不约而同地建议在数据库中维护代理项/值查找。代码中没有
C.MySQL的优点之一是它直接支持枚举字段类型。IMHO使用有效数据而不是替代值是无限可取的 关于这一点,数据库界有一些争论——谷歌很快找到了82000个“关系数据库枚举类型”的匹配项。去读一些 但那些不同意将其作为一种实践的人不约而同地建议在数据库中维护代理项/值查找。代码中没有
C.我没有将其放入表中的主要原因是,我无法找到一种按自定义顺序排序记录的简单方法。例如,如果删除一条记录,任何新记录都会自动获取已删除记录在表中的“位置”。如果表中有位置字段,则可以在删除项目时在表上运行两个查询以调整位置:更新区域集位置=位置-1,其中位置>”(int)$pos;将使您删除的项目上方的所有项目恢复数字顺序。这样,表中的id仍然是唯一的,并且可以直接与其他来源关联。@GSTAR别傻了。这是唯一的选项。向表中添加排序字段很容易。为什么要用新字段代替已删除的字段?如果您删除了2-wh怎么办应该在什么位置?@simnom-假设我在我的表中添加了一个position字段,我创建了一条新记录,我希望它位于表中的位置2,但已经有一条记录位于位置2。我如何进行查询以正确更新所有行?@GSTAR-我想这取决于您如何处理条目。我如果您只是通过Navicat、phpmyadmin或类似工具添加条目,那么您可以首先使用类似“updateregions set position=position where position>=2”的内容更新现有条目“然后将新区域插入位置2。如果您使用内容管理系统来处理插入,那么我建议在末尾添加新条目,然后使用相同的过程创建某种上/下移动机制。我没有将其放在表中的主要原因是,我无法找到按自定义顺序排序记录的简单方法。例如,如果删除一条记录,任何新记录都会自动获取已删除记录在表中的“位置”。如果表中有位置字段,则可以在删除项目时在表上运行两个查询以调整位置:更新区域集位置=位置-1,其中位置>”(int)$pos;将使您删除的项目上方的所有项目恢复数字顺序。这样,表中的id仍然是唯一的,并且可以直接与其他来源关联。@GSTAR别傻了。这是唯一的选项。向表中添加排序字段很容易。为什么要用新字段代替已删除的字段?如果您删除了2-wh怎么办应该在什么位置?@simnom-假设我在我的表中添加了一个position字段,我创建了一条新记录,我希望它位于表中的位置2,但已经有一条记录位于位置2。我如何进行查询以正确更新所有行?@GSTAR-我想这取决于您如何处理条目。我如果您只是通过Navicat、phpmyadmin或类似工具添加条目,那么您可以首先使用类似“updateregions set position=position where position>=2”的内容更新现有条目“然后将新区域插入位置2。如果您使用内容管理系统来处理插入,那么我建议在末尾添加新条目,然后使用相同的过程创建某种上/下移动机制。