ziegenmelker: SQL Abfrage Eigenvereinigung

Beitrag lesen

Hallo,

Guten Tag

Ich habe folgende Tabelle:

+----+---------+--------------+
| id | parent  |     wort     |
+----+---------+--------------+
| 1  |   1     |  neues Wort  |

| 2  |   1     |  Baum        |

| 3  |   2     |  Ast         |

| 4  |   1     |  Haus        |

| 5  |   4     |  Fenster     |

| 6  |   1     |  Hand        |

| 7  |   1     |  Meer        |

| 8  |   6     |  Finger      |

Als Resultat möchte ich:

2 Baum
3 Baum > Ast
4 Haus
5 Haus > Fenster
6 Hand
8 Hand > Finger
7 Meer

Was bisher geschah:

SELECT a.id,
IF(a.parent = 1,
a.wort,
CONCAT(b.wort, ' > ', a.wort)) AS blah
FROM tabelle AS a, tabelle AS b

bis hier scheint mir das ok. Ich empfehle dir aber eine bessere Strukturierung.

WHERE a.id=b.parent

Dies erscheint mir falsch, sollte eher so lauten:
where a.parent = b.id

AND b.parent > 1
ORDER BY blah

Nach der Verknüpfung der tabelle mit sich selbst über a.parent = b.id erhälst du folgendes Skalarprodukt:

+------+-----------+--------------+------+-----------+--------------+
| a.id | a.parent  |   a.wort     | b.id | b.parent  |   b.wort     |
+------+-----------+--------------+------+-----------+--------------+
|   1  |     1     |  neues Wort  |   1  |     1     |  neues Wort  |
---------------------------------------------------------------------
|   2  |     1     |  Baum        |   1  |     1     |  neues Wort  |
---------------------------------------------------------------------
|   3  |     2     |  Ast         |   2  |     1     |  Baum        |
---------------------------------------------------------------------
|   4  |     1     |  Haus        |   1  |     1     |  neues Wort  |
---------------------------------------------------------------------
|   5  |     4     |  Fenster     |   4  |     1     |  Haus        |
---------------------------------------------------------------------
|   6  |     1     |  Hand        |   1  |     1     |  neues Wort  |
---------------------------------------------------------------------
|   7  |     1     |  Meer        |   1  |     1     |  neues Wort  |
---------------------------------------------------------------------
|   8  |     6     |  Finger      |   6  |     1     |  Hand        |
---------------------------------------------------------------------

Hieraus triffst du jetzt deine Einschränkunken/Bedingungen:
Zeige immer a.id.
Wenn a.parent = 1, zeige a.wort, sonst zeige (b.wort > a.wort)

hth.

cu,
Michael