2016-05-08 14 views
1

Ich habe eine Tabelle mit dem Namen categories.Wie rekursiv Unterkategorien bevölkern?

Die Tabellenstruktur ist wie folgt:

DROP TABLE IF EXISTS `categories`; 
CREATE TABLE `categories` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `title` varchar(100) CHARACTER SET utf8 NOT NULL, 
    `parent_id` int(11) NOT NULL DEFAULT '-1', 
    PRIMARY KEY (`ID`) 
); 

Es gibt 3 Arten von Gegenständen, die in der Tabelle:

  1. Hauptkategorie (deren parent_id -1)
  2. Zweite Level-Kategorie (wessen parent_id ist eine der Hauptkategorien)
  3. Dritte Ebene Kategorie (deren parent_id ist eine der Second Level Kategorien)

Hier einige Beispieldaten:


- Datensätze von Kategorien


INSERT INTO `categories` VALUES ('1', 'A', '-1'); 
INSERT INTO `categories` VALUES ('2', 'B', '-1'); 
INSERT INTO `categories` VALUES ('3', 'C', '-1'); 
INSERT INTO `categories` VALUES ('4', 'a', '1'); 
INSERT INTO `categories` VALUES ('5', 'b', '2'); 
INSERT INTO `categories` VALUES ('6', 'c', '3'); 
INSERT INTO `categories` VALUES ('7', 'aa', '4'); 
INSERT INTO `categories` VALUES ('8', 'bb', '5'); 
INSERT INTO `categories` VALUES ('9', 'cc', '6'); 
INSERT INTO `categories` VALUES ('10', 'ccc', '6'); 

Ich möchte wie unten eine Ausgangsstruktur erhalten:

Main Category  Second Level Category  Third Level Category 
A       a       aa 
B       b       bb 
C       c       cc 
C       c       ccc 

Jede Hilfe sehr geschätzt wird.

+0

wie entschieden werden Kategorien? – zee

+0

Sorry hat Ihre Frage nicht beantwortet. @NullSoulException –

Antwort

2

Sie können es versuchen:

SELECT 
t1.title AS 'Main Category', 
t2.title AS 'Second Level Category', 
t3.title AS 'Third Level Category' 
FROM categories AS t1 
INNER JOIN categories AS t2 ON t2.parent_id = t1.ID 
INNER JOIN categories AS t3 ON t3.parent_id = t2.ID; 

Sie werden wie unten Ausgabestruktur erhalten:

Main Category  Second Level Category  Third Level Category 
A       a       aa 
B       b       bb 
C       c       cc 
C       c       ccc 

Reference