0

EAV テーブル設計を使用しなければならない状況があります。

次の2つのテーブルがあります。

ノード

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

上記のクエリは次を出力します (1 行のみ)

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

attributesからの行を含むノードテーブルから 2 つの行を出力するにはどうすればよいですか?

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 に答える