如何从EAV表设计中查询多行?

时间:2013-02-10 07:40:55

标签: mysql entity-attribute-value

我有一种情况,我必须使用EAV表设计。

我有以下两张表。

节点

id    name    structure_id
 1    name 1       7
 2    name 2       7

属性

id    node_id    name       value    structure_id
1       1        firstname  test         7
2       1        lastname   test         7
3       2        firstname  test         7

我有以下查询

SELECT n.*, GROUP_CONCAT( CONCAT_WS('||', a.name, a.value) ORDER BY a.name SEPARATOR ';;' ) as _attributes
            FROM nodes n JOIN attributes a ON n.structure_id = a.structure_id where n.structure_id = 7

以上查询输出以下内容(仅一行)

id: 1
name: name 1
structure_id: 7
_attributes: firstname||test;;firstname||test;;firstname||test;;firstname||test;;lastname||test;;lastname||test

如何从节点表中输出两行及其属性的行?

2 个答案:

答案 0 :(得分:2)

如果通过structure_id和node_id连接节点和属性表,您将获得所需的结果集。 期望的结果集:“来自节点表及其属性行”。

祝你好运

答案 1 :(得分:1)

select n.id,n.name,n.structure_id,firstname,lastname from Nodes n 
join (select node_id, a.value as firstname from Attributes a where a.name='firstname' ) matches1 on matches1.node_id = n.id 
left join (select node_id, a.value as lastname  from Attributes a where a.name='lastname' )  matches2 on matches2.node_id = n.id