SQL:用户定义的列

SQL: user defined columns

在我的应用程序中,我需要一个包含自定义列的成员列表。所以我创建了一个只有 ID 的成员 table。 member_attributes table 包含名称和类型(例如 'Name'、'string' 或 'Birthday'、'date')。在第三个 table 中,我有成员的外键 table (member_id),属性的外键 table (member_attribute_id) 和值属性。

members: id, timestamps

member_attributes: id, name, type, timestamps

member_attribute_values: member_id, member_attribute_id, value

第一个问题:这是实现此目标的正确方法吗?到目前为止一切正常。

第二个问题是如何 select 所有属性,即使它们是空的。我尝试了右连接,但这不起作用:

SELECT * FROM member_attributes
RIGHT JOIN member_attribute_values on (member_attribute_values.member_attribute_id = member_attributes.id)
RIGHT JOIN members on (members.id = member_attribute_values.member_id)

检查此 fiddle: http://sqlfiddle.com/#!9/7e097b/1

您可以使用 Cross joinSub-Query

实现此目的
SELECT * FROM (SELECT members.id as member_id, attributes.id as attributesid, name, type FROM attributes, members) as t
left join member_attribute_values as mav on t.member_id = mav.member_id and
t.attributesid = mav.member_attribute_id
order by t.member_id

SQL提琴手:http://sqlfiddle.com/#!9/3799f/9

另一种方法..

我在几个项目中一直在做类似的事情。我选择对属性名称和值都使用一个 table,并使用成员的外键。

member_attributes: id, memberId, name, type, value

foreign key on memberId = members(id)

members: id

然后您可以通过一个简单的

为用户简单地select所有member_attributes行
select * from member_attributes where memberId = ?