我正在制作一个表单,用于存储有关我们公司收到的查询主题的信息。
我使用 php/MySQL 来存储单选按钮数据,例如:
- 员工姓名
- 查询方式(电子邮件/电话/亲自)
有了这样的单选按钮数据,我可以轻松地使用 PHP 来查询数据库,例如统计每位员工通过电子邮件回答的查询数量。
我遇到的问题是有关查询主题的数据。这是带有许多不同复选框(50+)的复选框数据。我们希望能够不时添加或删除复选框,尽管不是很频繁。
我曾经将此数据以逗号分隔值的形式存储在数据库中的单个单元格中,然后导出到 Excel 来处理数据,但现在我想使用另一个 PHP 表单来生成有关主题的统计信息.
我的研究让我找到了两种可行的方法:
- 在我的数据库中为我的主题创建一个单独的表,其中每个可能的主题有一列,这样我的数据库中的列数就与表单中复选框的数量一样多。
- 使用 PHP 函数序列化将复选框数据存储在数据库的一个单元格中,然后使用反序列化处理 PHP 中的数据。
我是一个绝对的初学者,因此对于这两个选项,我不确定如何实际实现它:
- 使用此选项,我不确定我的 MySQL 列是否应该只是“主题 1”、“主题 2”等,或者它们是否应该具有我的复选框值的名称,例如“金钱”、“个人问题”、“实际问题”等。当用户有时可能只单击 1 个主题时,我无法找到关于如何以正确方式存储复选框数据的好资源,并且在其他情况下可能点击了 10 个主题。
- 使用此选项时,我不确定如何使用唯一值填充下拉列表,以及稍后如何计算数据库中各行中唯一值的实例。
如果您能在这方面给我任何帮助,包括教程的链接或 stackoverflow 上与此类似的问题,我将不胜感激。除了我认为选项 1 可能是正确的选择之外,我无法找到任何我能理解的内容。
编辑:在从大卫那里收到关于如何做到这一点的想法后,我正在更新我的帖子,试图了解我将如何去做。
最佳答案
您所描述的可以被视为多对多关系。你有:
- 表单记录,可以涉及多个主题
- 一个主题,可以与许多表单记录相关
在这种情况下,关系本身就是一条数据库记录。考虑这个表结构:
FormRecords
----------
ID
SomeTitle
UserIDWhoFilledOutForm
etc.
Themes
----------
ID
ThemeName
etc.
FormRecordThemes
----------
FormRecordID
ThemeID
每个“主要实体”都有一个标识符和有关该实体的信息。然后有一个“链接表”,其中包含有关这两个实体之间关系的信息。
每当您呈现表单时,您只需从主题中进行选择即可填充复选框。您可以根据需要添加新的。您可能不应该删除任何内容,尽管您可以通过在记录上设置一些标志来“软删除”它们以指示不在表单上显示它们。
如果您想以任何重要的方式编辑主题(这种方式会以某种方式使该记录的先前使用无效,例如完全更改其名称/标题),然后请记住,您将修改其使用的整个历史记录。我不知道这在您的域中是否存在风险,但在这种情况下,通过在关系表中存储“当时的主题”值可能有助于稍微反规范化。例如,创建关系时主题的名称。如果可能的话,最好完全避免这种情况,主要是通过使关键主题值在域中不可变。
<小时/>不要存储分隔列表,不要存储序列化数据(除非整个对象确实是单个数据点)...将值分隔成数据库中自己的实际值。关系数据库非常擅长查询关系数据。
关于php - 如何构造 MySQL 数据库来存储多个复选框表单数据并稍后在 php 中进行统计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33825275/