2016-08-05 32 views
0

Ich habe eine Tabelle "knowledgemodel" [enter image description here] [1]Mysql Rekursion Abfrage funktioniert nicht auf MariaDB

Meine Suche

SELECT 
    title, id, @parent:=parent_id as prnt 
FROM 
(SELECT @parent:=3) a 
JOIN 
(SELECT * FROM knowledgemodel ORDER BY id DESC) b 
where 
@WHERE=id 

enter image description here

in Mysql Server: 127.0.0.1 über TCP/IP Servertyp: MySQL Serverversion: 5.6.16 - MySQL Community Server (GPL) Protokollversion: 10 Die obige Abfrage funktioniert einwandfrei.

Aber auf MariaDB im immer nur einen Datensatz enter image description here

Jede Hilfe ??

+0

Ich bin mir nicht sicher, aber verpassen Sie nicht die ON-Anweisung nach dem 'JOIN'? – Marcus

+0

Kein 'ON' benötigt. Dies ist ein 'CROSS JOIN', bei dem die erste Tabelle nur '@ parent' initialisiert. –

+0

Es scheint äußerst ineffizient zu sein, alle Zeilen zu holen, dann nach 'id' zu filtern. Verschieben Sie die 'WHERE ID = @ where' in die zweite Unterabfrage. Dann erkenne, dass du das nicht als Unterabfrage brauchst. –

Antwort

0

Ich habe das Problem gefunden und das Problem behoben.

SELECT T2.id, T2.title, T2.parent_id als Prnt

FROM (

_id AS SELECT @r,

(SELECT @r: = parent_id FROM knowledgemodel WHERE id = _id) AS parent_id,

@l: = + 1 @l AS lvl

FROM (

SELECT @r: = "$ value [ 'Pfad'].", @l: = 0) Vars, knowledgemodel m WHERE @r <> 0)

T1 T2 knowledgemodel ON T1._id = T2 JOIN .id ORDER BY T1.id asc

Der LNine SELECT "$ value ['Pfad']" @r: = 5 ist die ID. Das Ergebnis ist wie folgt: