MySQL: Sortieren nach Anzahl von Wert X in Feld Y

Mastema

Grünschnabel
Hallo,

ich habe da ein kleines MySQL Problem, ich hoffe, ich bekomme es halbwegs so beschrieben, dass man mir helfen kann :)

Ich habe eine Tabelle, in der stehen u.a. folgende Felder (sind noch einige mehr, die sind für das Problem aber irrelevant):

id, username, ref_id

In "id" steht halt die User ID (unique), "username" der Name und unter "ref_id" die ID des Users, der den betreffenden geworben hat.

Nun möchte ich mir diese Tabelle ausgeben lassen, und jeweils auch die Anzahl, wie viele User jemand geworben hat, mit anzeigen.
Ohne Sortierung mach ich das einfach so, dass ich die Anzahl nachträglich mittels "SELECT COUNT(*)..." abfrage, allerdings hätte ich nun gern die Möglichkeit, auch nach diesem Wert zu sortieren, also "Wer hat die meisten Refs".

Ich hatte schon überlegt, diese Anzahl vorher komplett für alle User abzufragen und jeweils in einem extra Feld zu speichern, aber sonderlich schön finde ich diese Lösung nicht (und wohl auch eher nicht gut für die Performance, wenn man vor jedem Wechsel der Sortierung erstmal die komplette Tabelle aktualisiert).

Geht das nicht irgendwie auch mit einer angepassten Abfrage direkt so zu sortieren?
 
Zuletzt bearbeitet:
Was das Ganze mit der ref_id und Angriffen zu tun hat? keine Ahnung.

Irgendwie versteh ich noch nciht ganz was du wirklich haben willst.

SQL:
SELECT ref_id, COUNT(*)
FROM myTable
GROUP BY ref_id
ORDER BY COUNT(*)

Falls das nicht das gesuchte ist, mach bitte ein Datenbeispiel mit Tabellen. So in der Art:
Das hab ich:
Code:
Tabelle mitarbeiter
id | firma_id | name
--------------------
1  | 1        | MA1
2  | 1        | MA2
3  | 2        | MA3

Tabelle Firma
id | name
---------------------
1  | firma1
2  | firma2

Nun will ich wissen, welche Firma wieviele Mitarbeiter hat. Das soll dann so aussehen
Code:
firma_id | firma_name | anzahl_mitarbeiter
------------------------------------------
1        | firma1     | 2
2        | firma3     | 1
 
Zuletzt bearbeitet von einem Moderator:
Das mit dem Angreifen gehörte da nicht hin, passiert wenn man mehrere Projekte durcheinander bringt, habs editiert ;)

Also, die Tabelle sieht so aus:

idusernameref_id
1foo0
2bar1
3lol1
4blub0

Die id ist unique, in "ref_id" steht die ID von dem, der den User geworben hat (0 wenn kein Werber).

Jetzt möchte ich mir diese Daten ausgeben lassen, und sortierbar machen nach id, username (das ist ja kein Problem) und "Zahl der geworbenen User".

In diesem Beispiel hätte User 1 (foo) ja 2 andere User geworben, und genau diese Zahl will ich nicht nur einfach ausgeben, sondern auch nach dieser Zahl sortieren.
 
Ich würde es ungefähr so probieren (achtung, ist ungetestet)
Also ine inem Sibselect einen COUNT() mit Gruppierung auf die ref_id und dann das Resultat anhängen
SQL:
SELECT
	u.id,
	u.1username,
	u.ref_id,
	ref.cnt AS cnt
FROM
	mytable AS u
	LEFT JOIN (
			SELECT ref_id, COUNT(*) AS cnt
			FROM mytable
			GROUP BY ref_id
		) AS ref
		ON u.id = ref.ref_id
ORDER BY
	ref.cnt DESC
 
Zuletzt bearbeitet von einem Moderator:
Zurück