Wie man rekursive Abfragen in SQLite?

wenn meine Daten-Struktur ist, wie dies

parentA
-------parentAA
--------------parentAAA
---------------------childA

wenn ich "childA.Namen" . wie kann ich wissen, daß Sie alle den Namen des übergeordneten, bis die oberste Ebene.
so wird es sein, wie diese > parentA/parentAA/parentAAA/childA

was ist der beste Weg, dies zu tun ?

arbeite ich mit SQLite und JAVA/android .. danke in adv.

____________ EDIT

Okay Jungs, danke für alle u . also habe ich es nur wiederholen, die "select-Abfrage". BOTTOM-UP dies ist die Methode, die ich erstellen

public String getPath(int id, int type) {
        StringBuilder pathBuilder = new StringBuilder();
        String sql = null;
        int parentId = 0;

        if (id == 0) {
            pathBuilder.insert(0, "/root/");
            return pathBuilder.toString();
        }

        if (type == LayerManagementActivity.PARENT) {
            do {
                sql = "SELECT id, name, parent_id from parents_table where id="
                        + id;
                Cursor c = mDatabase.rawQuery(sql, null);
                if (c.moveToFirst()) {
                    parentId = c.getInt(2);
                    id = c.getInt(0);
                    pathBuilder.insert(0, "/" + c.getString(1));
                    c.close();
                }
                id = parentId;
            } while (parentId != 0);

            pathBuilder.insert(0, "/root");
            pathBuilder.append("/");

        } else if (type == LayerManagementActivity.CHILD) {
            sql = "SELECT id, name, folder_id FROM childs_table WHERE id=" + id;
            Cursor c = mDatabase.rawQuery(sql, null);
            if (c.moveToFirst()) {
                pathBuilder.append(c.getString(1));
                id = c.getInt(0);
                int folderId = c.getInt(2);
                String path = getPath(folderId, LayerManagementActivity.PARENT);
                pathBuilder.insert(0, path);
            }
            c.close();
        }
        Log.d("crumb", pathBuilder.toString());
        return pathBuilder.toString();
    }
  • Pls nicht verwenden rekursive Funktion, Ihre macht, Ihre Anwendungs-performance nach unten
  • SQLite unterstützt keine rekursiven Abfragen direkt (kein CTE oder VERBINDEN) - es müssen so viele selects (wie joins oder in mehreren Abfragen) pro Ebene in einem Ansatz verwendet, die eine Eltern-Kind-Beziehung verknüpfen. Andere Ansätze, die nicht brauchen Rekursion zur Beantwortung dieser Abfrage gehören materialisierte Pfade und verschachtelte Sätze (Suchbegriffe).
  • Rekursive Funktionen sind oft feine (und SQLite hat eine sehr geringe Latenz) - was wirklich tötet Leistung nicht Indizes über weite Sätze; oder ersatzweise zu verwenden, legen Sie Verknüpfungen und Indizes, wie: z.B., wenn jeder Knoten wurde gebeten, über alle Eltern, die es hatte, und einige andere SQL-Informationen, die benötigt werden, gesammelt auf dieser Basis - das könnte sehr eklig! Aber für eine einzelne Abfrage (zumindest so vorgestellt), nicht so schlecht.
  • okay, also wenn wir nicht verwenden können, rekursive Funktion in sqlite, was sind die alternativen ?
Schreibe einen Kommentar