2016-06-29 9 views
0

Ich versuche, eine MySQL-Abfrage zu schreiben, wo,SQL Query Summe der Menge zu bekommen, von Kindern Benutzer basierend auf Eltern

AIM: Daten Monat weise wie diese

MAY 20000 //sum of total amount earned by team (me and children alloted to my team) 
June 23432 
July 34488 

ich habe eine Tabelle mit dem Namen . In dem ich einen fremden Schlüsselname user_id habe.

Hier ist, wie mein wie folgt aussieht:

enter image description here

nun in dieser, wie Sie i user_id haben sehen können, so in meinem foadc_users Tabelle habe ich Felder Struktur wie folgt aus:

enter image description here

Hier in der obigen Tabelle haben wir Kind - Eltern - Beziehung zwischen id und under_id.

Jetzt könnte ich mehrere Kinder unter den Kindern eines Elternteils haben, dies kann eine unbegrenzte Struktur. Ich möchte total Monat weise des gesamten Kinderbaums eines bestimmten Elternteils berechnen.

Ich versuche dies in MySQL/Eloquent zu tun. Aber dafür bin ich auch mit der rohen Abfrage in Ordnung. Ich werde zu beredten konvertieren.

Wie pro Ihren Vorschlag hier ist das Ergebnis: enter image description here

+0

Wenn die Höhe (max) des Baums bekannt ist dann möglich ist, zu erhalten, wie .... es gibt keine cte oder ähnliches in mysql .. –

+0

normalerweise bis zu 6 level wird der max sein – user3201500

Antwort

0

Versuchen Sie, diese

wählen fu.name, date_format ('validafrom', '% M'), Summe (Betrag) von foadc_invoice fi linker äußerer Join foadc_users fu on fu.id = fi.user_id group von fu.name, date_format ('validafrom', '% M')

+0

Vielen Dank für Ihre Antwort.Aber das Ergebnis sieht zuletzt wie der Anhang aus. – user3201500

+0

Hier anstelle von 'validafrom' habe ich' created_at' Feld verwendet, da ich auch dieses Feld habe. – user3201500

+0

Können Sie uns bitte auch vorschlagen, wie können wir die Summe der Kinder auch? – user3201500

1

wir haben kein CTE in meinem sql, daher müssen wir eine Unterabfrage verwenden .

wenn es nur zwei Level (dh) algo ...

Schritt 1 zunächst für jeden seiner Eltern finden, wenn kein Elternteil selbst prüfen, wie es parentID.

Wiederholen Sie den gleichen Schritt immer wieder (wenn maximale Höhe 4 dann 4 Mal ist).

Schritt 2 Jetzt haben Sie Kind-ID und entsprechende Top-Level-Eltern verbinden Sie dies mit Foadc_invoice und Summe (Ammount) und Gruppe von ParentID.

Probe für 2 Stufe für Stufe 1

SELECT p.id as id , coalesce(c.id ,p.id)as under_id FROM  foadc_users p LEFT JOIN foadc_users c ON p.id =c.under_id 

Probe 3 Pegel für Schritt 1

SELECT  p.id as id , coalesce(c.id ,p.id)as under_id 
     FROM 

      (SELECT p.id as id , coalesce(c.id ,p.id)as under_id FROM foadc_users p LEFT JOIN foadc_users c ON p.id =c.under_id) p 
    LEFT JOIN foadc_users c 
    ON p.id =c.under_id 
+0

danke für Ihre Antwort. Ich bin mit diesem approch für den gleichen 'select id, Namen, under_id aus (select * from foadc_users Auftrag von under_id, id) products_sorted, (wählen @pv: = '1') Initialisierung wo FIND_IN_SET (unter_id, @pv)> 0 und @pv: = concat (@pv, ',', id) '. Nun möchte ich Daten MONATLICH bekommen und mit foadc_invoice, um die Gesamtsumme – user3201500

+0

inteed der Gruppe von ParentID zu bekommen. Gruppe nach ElternID, Monat gruppieren ... –

Verwandte Themen