Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL数据库结构,用于存储具有多个可用选项的项目_Php_Mysql_Sql Update_Checkbox_Insert Update - Fatal编程技术网

Php MySQL数据库结构,用于存储具有多个可用选项的项目

Php MySQL数据库结构,用于存储具有多个可用选项的项目,php,mysql,sql-update,checkbox,insert-update,Php,Mysql,Sql Update,Checkbox,Insert Update,我早些时候问过这个问题,但找不到答案。。首先为我的英语感到抱歉 我有一个表格,包括80个复选框:这些复选框是汽车的选项, 以汽车为例;Mp3播放器| ABS |安全气囊|空调| 用户应该从复选框中选择自己的汽车选项并张贴。。问题是什么?我应该如何将它们存储在数据库中?顺便说一句,用户应该能够在以后更新它们 我应该使用infrade()并像这样存储它们吗 option1 , option2 , option34 , option45 , option66 , in one column 还是那

我早些时候问过这个问题,但找不到答案。。首先为我的英语感到抱歉

我有一个表格,包括80个复选框:这些复选框是汽车的选项,
以汽车为例;Mp3播放器| ABS |安全气囊|空调|

用户应该从复选框中选择自己的汽车选项并张贴。。问题是什么?我应该如何将它们存储在数据库中?顺便说一句,用户应该能够在以后更新它们

我应该使用infrade()并像这样存储它们吗

option1 , option2 , option34 , option45 , option66 ,  in one column
还是那样

Car_ID | Options | 
155      option2
155      option34
155      option45
155      option66 
(他们应该如何更新它们?)

或者在数据库中打开80列等等

Car_ID | Option1 | Option2 | Option3 | Option4 | Option5
155         true     true      false     false     false

您应该有一个选项表、一个用户表和一个与它们相关的用户选项表。这将允许您根据需要轻松修改选项并添加或删除选项

Users
user_id,username

Options
option_id,option_name

User Options
option_id,user_id
如果每个用户可以拥有多辆车,则应为:

Users
user_id,username

Options
option_id,option_name

Cars
car_id,car_name

User_Car_Options
user_id,car_id,option_id
最好的办法就是这样

+---------+----------+----------+----------+
| Car_ID  | Option1  | Option2  | Option3  |
+---------+----------+----------+----------+
| 1       | TRUE     | FALSE    | NULL     |
| 2       | TRUE     | NULL     | FALSE    |
| 3       | NULL     | TRUE     | FALSE    |
+---------+----------+----------+----------+
(如果您觉得这会使原始表变得混乱,也可以简单地将这些列放在单独的表中,并在它们之间建立1:N关系)

编辑:

但是,如果复选框是动态的,并且您希望能够从列表中添加/删除复选框,那么您可能需要设置一个N:M关系,其中表中的每一行都可以为每个复选框设置一个值。 这需要一个单独的表来存储ceckbox,并需要一个中间表来存储表a中每一行对应于每个复选框的值。 比如:


可能适用于某些应用程序,但不是最佳做法。看看Ethan的想法。他们应该如何更新选项?例如,用户错误地检查了Mp3播放器并发布了它,然后他取消了检查?在前端有很多方法可以做到这一点。为了便于用户使用,如果可能,我将使用AJAX,并将事件绑定到复选框更改事件。然后我会向我的应用程序提交一个1或0,然后做后端工作。理想情况下,用户id将存储在会话中,汽车id也应该从隐藏的输入字段提交。
/* Your table */
+-----+
| AID | 
+-----+ 
| 1   |
| 2   |
| 3   | 
+-----+

/* The table for the boxes */
+-------+-------+
| BoxID | Label |
+-------+-------+
| 1     | Box1  |
| 2     | Box2  |
| 3     | Box3  |
+-------+-------+

/* The intermediary table 
 * linking them together */
+-----+-------+-------+
| AID | BoxID | Value |
+-----+-------+-------+
| 1   | 1     | TRUE  |
| 1   | 2     | FALSE |
| 2   | 1     | TRUE  |
| 2   | 3     | FALSE |
| 3   | 2     | TRUE  |
| 3   | 3     | FALSE |
+-----+-------+-------+