0

我有一个约会网站,每个用户都有自己的个人资料,其中包含 20 多个属性,如年龄、性别、爱好等。为此,我有一个表 user_profile,其中所有属性都在 1 行中。

对于搜索和匹配计算器,将属性值放在 int 中可能比在 varchar 中更好。但是现在我不确定如果 name 不是一个值,如何打印所有属性名称。

所以我想创建两个表:

用户资料
用户 ID | 性别 | 喜欢宠物 | 饮料| 身体类型 | 眼睛| 高分辨率照片| CLIPARTO 头发颜色 | ...
1 | 1 | 3 | 2 | 4 | 5 | 5 | ...
2 | 2 | 4 | 2 | 3 | 3 | 5 | ...
user_attributes
id | attr_group | value_name | attr_value
1  | 1          | male      | 1
2  | 1          | famale    | 2
3  | 2          | Like pets | 1
4  | 2          | Have pets | 2
5  | 2          | Don't like pets | 3
6  | 3          | Blue      | 1
7  | 3          | Gray      | 2
8  | 3          | Green     | 3
9  | 3          | Brown     | 4
... 

但这意味着我需要创建 20 个查询来打印所有属性的所有值名称。例如要打印我需要的眼睛颜色

SELECT * FROM user_attributes WHERE attr_group=3

然后对于性别和彼此的属性再次相同。

这是正确的方法吗?

4

2 回答 2

0

如果您确实需要所有属性的所有名称,只需询问数据库即可:

SELECT * FROM user_attributes ORDER BY attr_group

从数据库中获取结果后,现在在代码中进行分组。它们将被方便地排序,因此很容易将具有相同attr_group.

要将其与 user 表连接起来,我建议您考虑使用另一个表来存储属性,并使用 columns (user_id, attr_group, attr_value)。然后,您可以跨此表加入并user_attributes获得所有结果。

于 2012-04-28T09:01:35.330 回答
0

Yes, it is good to have a lookup table that has all the acceptable values. (Yes, even if there are 20 of them.) You can create a foreign key relation from the other table to the lookup table that'll tell you at time of row insert / update if the code is trying to link to a value that doesn't exist. When you're ready to display the data, just join the tables, and harvest the name.

于 2012-04-28T09:10:10.273 回答