• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

wieder probleme mit sqlabfrage

lonely_hawk

New member
hab eine mysql abfrage an der ich nicht weiter komme...

vereinfachtes bsp.:

eine tabelle mit Spielern
eine tabelle mit Mannschaften
eine tabelle mit der Zuordnung (idverein - idspieler)

jeder spieler besitzt ein 'punktekonto' also eine spalte in der Spielertabelle wo dessen punkte drin stehen. z.b. '11205'

nun möchte ich ersteinmal die gesamtpunktzahl aller Spieler eines vereins wissen... das mache ich verkürzt dargestellt so:

Code:
SELECT SUM(Spieler.punkte) FROM Vereine LEFT JOIN Zuordnung USING(vereinsid) LEFT JOIN Spieler USING(spielerid) WHERE vereinsid = 'die vereinsid' GROUP BY vereinsid");

und das funktioniert auch.

nun möchte ich aber eine Liste aller Vereine, sortiert nach dieser gesamtpunktzahlen der jeweilgen mitglieder (spieler).

und das will mir nicht gelingen. mein letzter ansatz sieht (verkürzt) so aus:

Code:
SELECT COUNT(SUM(Spieler.punkte)) AS hoehereplaetze FROM Vereine LEFT JOIN Zuordnung USING(vereinsid) LEFT JOIN Spieler USING(spielerid) WHERE hoehereplaetze > '$gesamtpunktzahl' GROUP BY Vereine.vereinsid ORDER BY (SUM(Spieler.punkte))

ich möchte also wieder die Summe der Spielerpunkte pro verein bilden, die dann mit order by nach größer sortieren und dann zählen wie viele vereine 'über' dem jetzigen sind. Dann hoehereplaetze+1 und ich hab die gewünschte position... theoretisch

aber da kommt wie bei allen bisherigen versuchen leider eine Fehlermeldung, hier ist es die: "#1111 - Invalid use of group function "

kann mir da jemand helfen?
 
Code:
SELECT COUNT(SUM(Spieler.punkte)) AS hoehereplaetze
          , SUM(Spieler.punkte) AS points
FROM Vereine 
LEFT JOIN Zuordnung USING(vereinsid) 
LEFT JOIN Spieler USING(spielerid) 
WHERE hoehereplaetze > '$gesamtpunktzahl' 
GROUP BY Vereine.vereinsid 
ORDER BY points

so sollte es gehen.
Verwende beim nächsten längeren SQL-Statements doch nen paar Zeilenumbrüche; läßt sich besser lesen.
 
unter COUNT(SUM(Spieler.punkte)) kann ich mir nichts vorstellen. meiner meinung nach sollte es so:
Code:
SELECT COUNT(hoehereplaetze) 
FROM (
  SELECT SUM(Spieler.punkte) AS hoehereplaetze 
  FROM Vereine 
  LEFT JOIN Zuordnung USING(vereinsid) 
  LEFT JOIN Spieler USING(spielerid) 
  GROUP BY vereinsid 
  HAVING SUM(Spieler.punkte) > $var
) AS tmp;
gehen. wobei du die anzahl auch ohne datenbank bekommen könntest.
 
Code:
SELECT COUNT(SUM(Spieler.punkte)) AS hoehereplaetze
          , SUM(Spieler.punkte) AS points
FROM Vereine 
LEFT JOIN Zuordnung USING(vereinsid) 
LEFT JOIN Spieler USING(spielerid) 
WHERE hoehereplaetze > '$gesamtpunktzahl' 
GROUP BY Vereine.vereinsid 
ORDER BY points

so sollte es gehen.
Verwende beim nächsten längeren SQL-Statements doch nen paar Zeilenumbrüche; läßt sich besser lesen.

<- führt leider wieder zu: #1111 - Invalid use of group function




unter COUNT(SUM(Spieler.punkte)) kann ich mir nichts vorstellen. meiner meinung nach sollte es so:
Code:
SELECT COUNT(hoehereplaetze) 
FROM (
  SELECT SUM(Spieler.punkte) AS hoehereplaetze 
  FROM Vereine 
  LEFT JOIN Zuordnung USING(vereinsid) 
  LEFT JOIN Spieler USING(spielerid) 
  GROUP BY vereinsid 
  HAVING SUM(Spieler.punkte) > $var
) AS tmp;
gehen.

das geht, liefert zumindest werte zurück. muss nun noch überprüfen, ob es auch die richtigen sind.
vielen dank ersteinmal bis hierher!

wobei du die anzahl auch ohne datenbank bekommen könntest.

wie das?


NACHTRAG: hab die werte nun überprüft und es scheint zu gehen, habe keine unregelmäßigkeit entdecken können. danke!
 
Zuletzt bearbeitet:
das war falsch ausgedrückt, ich meinte nur, daß du dir das 2. SELECT auch sparen kannst und einfach außenrum die anzahl der gelieferten datensätze nehmen kannst.

Bei vielen Datensätzen ist es allerdings sinnvoller die Datenbank zählen zu lassen, dann müßen die Daten nicht rübergeschoben werden.
 
Zurück
Oben