我有一个“t_form”表和一个“t_attribute”表。它看起来有点像下面。
表单
form_id | form_name | description
-----------------------------------
1 | Laptop | Possible attributes are Model, Screen Size, OS, Cd Player
2 | Mobile | Possible attributes are Model, OS
3 | Tablet | Possible attributes are Model, Screen size, OS
属性表
attribute_id | attribute
------------------------
1 | Model
2 | Screen Size
3 | OS
4 | Cd Player
Form_Attribute表
form_id | attribute_id
----------------------
1 | 1
1 | 2
1 | 3
1 | 4
2 | 2
2 | 2
3 | 2
3 | 2
3 | 2
我将根据用户从数据库中选择的表单类型(笔记本电脑,手机或平板电脑)生成如下所示的HTML表单(带表单字段)。
适用于笔记本电脑:
适用于移动设备:
对于平板电脑:
问题: 这是我的问题。
过滤
请提供一个可行的解决方案,并提供一些示例,以便更好地了解我并帮助我实现这一目标。
答案 0 :(得分:3)
我认为你可以选择像
这样的表格Form_Attribute_Values或Items
item_id | form_id | attribute_id | value
------------------------------------------------
1 | 1 | 1 | SuperLap
1 | 1 | 2 | 15
1 | 1 | 3 | MS-DOS 6
1 | 1 | 4 | Toshiba
通过这种方式,您可以查询输入的单个项目,还可以按表格,属性或属性值进行过滤。
Form_Attribute表格非常方便,可以生成特定表格的表格(即当用户想要输入笔记本电脑或手机时)。
Items表格将是您在插入后存储项目的位置或您要查询它们的位置。
您还可以在最后添加一个时间戳列,以便在项目保存时存储,如果您的数据将由多个用户填充,则添加User_id列。如果您可以存储商店中没有的商品,或者您可以将可用性保存在单独的表格中,也可以使用额外的可用列。
如果您可以从过滤表单中获取表单和属性ID,则对屏幕尺寸为14-16的笔记本电脑的查询将如下所示:
SELECT item_id,
form_name,
attribute_name,
value
INNER JOIN form
ON item.form_id = form.form_id
INNER JOIN attribute
ON item.attribute_id = attribute.attribute_id
WHERE item_id IN (-- here I select for Laptop and Screen Size dimension
SELECT item_id
FROM item
WHERE form_id = 1
AND attribute_id = 2
AND item.value BETWEEN 14 and 16
)
否则你需要更复杂的东西:
SELECT item_id
FROM item
INNER JOIN form
ON item.form_id = form.form_id
INNER JOIN attribute
ON item.attribute_id = attribute.attribute_id
WHERE item_id IN (-- here I select for Laptop and Screen Size dimension
SELECT item_id
FROM item
WHERE form_id = (-- but first I need the form_id
-- for Laptop
SELECT form_id
FROM form
WHERE form_name = 'Laptop')
AND attribute_id = (-- then I need the attribute_id
-- for Screen Size
SELECT attribute_id
FROM attribute
WHERE attribute_name = 'Screen Size')
AND item.value BETWEEN 14 and 16
)
答案 1 :(得分:1)
假设表单字段的属性正在增长,那么很容易使用JASON数据格式将此记录存储到像MongoDB这样的非关系数据库中。然后,您可以轻松查询MongoDB Jason数据。
如果您使用关系模型意味着上面的答案1最适合。