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 join
和 Sub-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
另一种方法..
我在几个项目中一直在做类似的事情。我选择对属性名称和值都使用一个 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 = ?
在我的应用程序中,我需要一个包含自定义列的成员列表。所以我创建了一个只有 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 join
和 Sub-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
另一种方法..
我在几个项目中一直在做类似的事情。我选择对属性名称和值都使用一个 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 = ?