我之前问过这个问题,但无法找到答案..首先对不起我的英语..
我有一个包含80个复选框的表单:这些复选框是汽车的选项,
汽车的例子; Mp3播放器| ABS |安全气囊|空调|
用户应从复选框中选择自己的汽车选项并发布..问题是?我应该如何将它们存储在数据库中?顺便说一下,用户应该能够在以后更新它们。
我应该使用implode()并将它们存储为
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
答案 0 :(得分:3)
您应该有一个选项表,一个用户表和一个与之相关的user_options表。这将允许您根据需要轻松修改选项并添加或删除选项。
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
答案 1 :(得分:0)
最好的方式就是那样
+---------+----------+----------+----------+
| Car_ID | Option1 | Option2 | Option3 |
+---------+----------+----------+----------+
| 1 | TRUE | FALSE | NULL |
| 2 | TRUE | NULL | FALSE |
| 3 | NULL | TRUE | FALSE |
+---------+----------+----------+----------+
(如果您认为这会使原始表格混乱,您也可以简单地将这些列放在一个单独的表中,并在它们之间设置1:N关系)
编辑:
但是,如果复选框是动态的,并且您希望能够从列表中添加/删除框,则可能需要设置N:M关系,其中表中的每一行都可以为每个行设置一个值复选框。 这将需要一个单独的表来存储ceckbox,以及一个中间表来存储表A中每一行的每个复选框的值。 像:
/* 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 |
+-----+-------+-------+