2016-06-14 8 views
2

hier ist, was ich gerade versuche zu erreichen. Ich habe eine Benutzer-Tabelle, die ich mit sich selbst verbinden möchte. Also frage ich alle Benutzer ohne ParentUserId und auch ein zusätzliches Feld namens ChildrenCount, wo ich eine Anzahl aller Benutzer mit der ParentUserId = UserId finden kann.INNER JOIN COUNT auf demselben Tisch

SELECT p.*, COUNT(*) as ChildrenCount FROM users p 
LEFT JOIN users q 
on q.userid = p.ParentUserId 
WHERE p.ParentUserId = 0 AND p.CategoryId = 2 ORDER BY p.userid DESC LIMIT 10 OFFSET 0 

Ich bekomme keinen Fehler, aber die Abfrage funktioniert nicht wie erwartet. Ich bekomme nicht die Anzahl aller verwandten Kinder. Datenbank ist MYSQL.

+3

Was ist deine Frage? –

+0

"Ich habe eine Benutzer-Tabelle, die ich mit sich selbst verbinden möchte. Also ich alle Benutzer ohne ParentUserId abfragen und auch ein zusätzliches Feld namens ChildrenCount, wo ich eine Anzahl von allen Benutzern mit der ParentUserId = UserId finden kann." Meine Abfrage funktioniert nicht. –

+0

Was ist der Fehler? –

Antwort

3

Wenn ich Sie richtig verstanden habe, können Sie eine korrelierte Abfrage verwenden:

SELECT p.*, 
     (SELECT count(*) FROM users s 
     WHERE s.parentUserId = p.userid) as ChildrenCount 
FROM users p 
WHERE p.ParentUserId = 0 AND p.CategoryId = 2 
ORDER BY p.userid DESC LIMIT 10 OFFSET 0 
+0

Bist du nicht in Gefahr von 'übertreiben' dieses – Strawberry

+0

Erste Antwort des Tages, gib mir eine Pause Zzz @Strawberry – sagi

+0

Ich kann nicht sagen, ob es Sarkasmus in diesem Kommentar, aber Das sieht nach einer Lösung für mich aus. Bonuspunkte, wenn Sie dies weiter "überdenken", indem Sie mit einem Link auf etwas aktualisieren, das dieses Konzept abstrakter diskutiert, so dass wir lernen können, wenn wir ähnliche Lösungen für andere Kontexte in Betracht ziehen. – Anthony

0

Ich glaube, Sie kommen nicht brauchen, weil Sie etwas von untergeordneten Tabelle nicht auswählen:

SELECT p.*, (SELECT COUNT(*) FROM `users` q WHERE q.userid = p.ParentUserId) as ChildrenCount 
FROM `users` p 
WHERE p.ParentUserId = 0 AND p.CategoryId = 2 
ORDER BY p.userid DESC LIMIT 10 OFFSET 0