0

我有一种情况,我必须使用 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

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

4

2 回答 2

2

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

祝你好运

于 2013-02-10T08:03:14.287 回答
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 
于 2013-02-10T08:20:39.073 回答