2017-02-06 2 views
1

Ich habe diese Tabellennamen MyLevels.PHP MySql erhalten Daten aus einer Tabelle und Links Join auf die gleiche Tabelle

id | level | ParentLevelId 
--------------------- 
1 | basic | 1 
2 | silver| 1 
3 | gold | 2 
4 | stone | 3 
5 | wood | 2 

In dieser Tabelle hat jede Ebene eine übergeordnete Ebene. Zum Beispiel ist die Eltern-ID "gold" 2. Es bedeutet, dass die Elternebene "silver" ist.
Also brauche ich eine Abfrage, um die unten in einer HTML-Tabelle zu erhalten: Elternebene kommt von ParentLevelId.

level | parent level | distance From Basic 
------------------------------------------- 
basic | basic  | 0 
silver | basic  | 1 
gold | silver  | 2 

Die Entfernung von basic Bezug auf die Zahl, die jede Ebene weit von basic Niveau ist.
Zum Beispiel ist die wood Level-ID 5 und 5 - 1 = 4. was bedeutet, dass es 4 Level weit von basic Level ist.
Dies ist der einzige Code, den ich habe:

$conn->prepare('SELECT id, level, ParentLevelId FROM MyLevels'); 

Jede Hilfe sehr geschätzt.

Danke

Antwort

1

Bitte versuchen Sie es.

select c.level as level, p.level as parent_level, c.id-p.id as distance_from_parent 
from MyLevels AS p 
JOIN MyLevels AS c on p.id = c.ParentLevelId 
+0

Vielen Dank Mann. Das hat perfekt funktioniert. Wo finde ich eine Dokumentation für solche Anfragen? –

+0

Es gibt keine ordnungsgemäße Dokumentation davon. Aber Sie müssen etwas über Joins lernen. – Naincy

+0

Wo kann ich zählen, um ein Ergebnis für jede Ebene zu erhalten, um zu zeigen, wie viele Unterstufen es gibt? –

1

können Sie das versuchen?

SELECT a.level, b.level ParentLeve , IFNULL(b.id,0) FROM 
MyLevels a left join MyLevels b on a.id=b.ParentLevelId 
+0

Got Fehler. Es funktioniert nicht. Uncaught Ausnahme 'Exception' mit Nachricht 'Sie haben einen Fehler in Ihrer SQL-Syntax –

+0

Was ist der Fehler? –

+0

Ich habe aktualisiert und können Sie jetzt überprüfen. wenn Fehler bitte schreibe Fehler –

1

Nur eine weitere Version, die Spaß macht.

Ich dachte, das op fehlte die Entfernung von einfach zu bekommen, was in diesem Fall id = 1.

Auf jeden Fall ist ein anderer Weg, dies zu schreiben ...

SELECT 
     b.level AS level, 
     a.level AS parent_level, 
     b.id-1 AS distance_from_basic 
     FROM MyLevels a 
     JOIN MyLevels b ON a.id = b.ParentLevelId 
      ORDER BY b.id 

Dies war getestet gegen die gewünschten Ergebnisse von der OP zur Verfügung gestellt.

Die Ergebnisse:

Level Parent Level Distance From Basic 
basic basic     0 
silver basic     1 
gold silver     2 
stone gold     3 
wood silver     4 
+0

Das hat auch funktioniert. Vielen Dank –

Verwandte Themen