SQL Abfrage Eigenvereinigung
Schorsch
- datenbank
0 dedlfix0 Schorsch0 ziegenmelker0 Schorsch
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
WHERE a.id=b.parent AND
b.parent > 1
ORDER BY blah
Das gibt mir aber nur:
2 Baum
4 Haus
aus.
Warum?
Gruss
Schorsch
echo $begrüßung;
Warum?
Bekommst du es selbst raus, wenn du das SELECT um a.*,b.* erweiterst?
echo "$verabschiedung $name";
Guten Tag
SELECT a.id,
IF(a.parent = 1,
a.wort,
CONCAT(b.wort, ' > ', a.wort)) AS blah
FROM tabelle AS a, tabelle AS b
WHERE a.id=b.parent AND
b.parent > 1
ORDER BY blah
Hab was rausbekommen:
SELECT b.id,
if(b.parent=1,
b.wort,
CONCAT(a.wort, ' > ', b.wort)) AS blah
FROM tabelle AS a
LEFT JOIN tabelle AS b ON a.id=b.parent
WHERE b.id != 1
ORDER BY blah
Das gibt mir schön mein gewünschtes Resultat.
Was ich nicht ganz genau verstehe, ist, warum die gesuchten ID's über b.id angezeigt werden.
Warum ist das so?
Ich hätte erwartet, dass die ID's mit a.id angezeigt werden. Ist bei
LEFT JOIN die gejointe Tabelle quasi die Haupttabelle? Oder wie muss man sich das ganz genau vorstellen?
Gruss
SChorsch
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 MeerWas 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
Salut
WHERE a.id=b.parent
Dies erscheint mir falsch, sollte eher so lauten:
where a.parent = b.id
Ah, ja, genau.
Vielen Dank, hat mir echt geholfen.
Genau dieser Fehler hat mich total verwirrt.
Gruss
Schorsch