Durchschnittspunktzahl der Mitglieder einer Gruppe berechnen

Was genau macht denn die dbquery()-Funktion? Zeig uns dazu am besten die Funktionsdefinition.
 
Also erstmal der neue Code, der musste ncoh verändert werden...
PHP:
<?php
// Beginn Verbindungsabfrage
$conn = mysql_connect("localhost", "bbeclan", "xxxxxxx");

if (!$conn) {
   echo "Keine Verbindung zur DB: " . mysql_error();
   exit;
}

if (!mysql_select_db("bbeclan_02")) {
   echo "Kann  Datenbank nicht auswählen: " . mysql_error();
   exit;
}
//Ende Verbindungsabfrage

$Name = $userdata['user_name'];
$Eins = 1;
$Bla = 0;
$My_id = 1;
$result2 = dbquery("SELECT clan_id FROM Clan");

While (count($result2) == $Bla) {

If (count($result2) == $Eins) {
$result = dbquery("SELECT name FROM Mitgliedschaften WHERE clan_id = 1");
while ($data = dbarray($result)) {
$Name2 = $data['name'];
$Memberzahl = $Memberzahl . $Eins;
$PPs2 = dbquery("SELECT betrag FROM Pimppoints WHERE user_name = '$Name2'");
$pps_durchschnitt = $pps_durchschnitt . $PPs2;
}
$pps_durchschnitt = $pps_durchschnitt / $Memberzahl;
$query = "UPDATE Clan SET pps_durchschnitt = $pps_durchschnitt WHERE ID = clan_id";
$result = mysql_query($query);
$Bla = $Bla . $Eins;
}

Else {
$result = dbquery("SELECT name FROM Mitgliedschaften WHERE clan_id = $My_id");
while ($data = dbarray($result)) {
$Name2 = $data['name'];
$Memberzahl = $Memberzahl . $Eins;
$PPs2 = dbquery("SELECT betrag FROM Pimppoints WHERE user_name = '$Name2'");
$pps_durchschnitt = $pps_durchschnitt . $PPs2;
}
$pps_durchschnitt = $pps_durchschnitt / $Memberzahl;
$query = "UPDATE Clan SET pps_durchschnitt = $pps_durchschnitt WHERE ID = clan_id";
$result = mysql_query($query);
$Bla = $Bla . $Eins;
$My_id = $My_id . $Eins;
}
}
?>

Also die Verbindung zur DB steht dauerhaft, aber ich hab ja nun nochmal ne Abfrage eingebaut die das checken soll....
Die dbquery() Funktion ist nichts anderes als eine Funktion die von der DB Daten abfragen und eintragen kann... Die genaue Definition weiß ich grad nciht, aber editiere gleich und poste sie....

EDIT: Da haben wir sie ja schon gefunden :D
PHP:
function dbquery($query) {
	$result = @mysql_query($query);
	if (!$result) {
		echo mysql_error();
		return false;
	} else {
		return $result;
	}
}
 
Das Problem wird die Bedingung der while-Kontrollstruktur sein:
PHP:
While (count($result2) == $Bla) { 
	…
}
Denn die mysql_query()- und damit auch die dbquery()-Funktion liefert nur eine MySQL-Ergebnisroussource zurück. Und das diese wie ein Array zählbar ist, bezweifle ich.
Die Anzahl der ausgewählten Datensätze eine Abfrage kannst du mit der mysql_num_rows()-Funktion ermitteln.
 
Mal abgesehen davon...welchen Sinn macht diese Schleife überhaupt :confused:
PHP:
While (count($result2) == $Bla) {

If (count($result2) == $Eins) {
selbst, wenn $result2 ein Array wäre... wenn seine Länge in der ersten Bedingung als 0 festgestellt wurde, brauchst du da keine weitere Schleife reintun, die prüft ob seine Länge 1 ist.
 
Was versuchst du denn mit diesem Skript zu realisieren, Lil-rich? Wahrscheinlich gibt es eine viel einfachere Lösung.
 
Ich will das er aus der Datenbank ausliest, wieviele Clans es gibt. Dann soll er für jeden Clan die Memberzahl und die Durchschnittspunkte berechnen und diese dann in der Datenbank UPDATEn ... Das Problem ist, dass er je Clan eine andere ID auswählen muss... Also wenn es 5 Clans gibt muss er immer andere WHERE Bedingungen auswählen id = 2 id = 5 usw. Ich denke mal ihr könnt die Funktionsweise dann ja auch halb aus meinem Script lesen....


PHP:
<?php
// Beginn Verbindungsabfrage
$conn = mysql_connect("localhost", "bbeclan", "Storcher");

if (!$conn) {
   echo "Keine Verbindung zur DB: " . mysql_error();
   exit;
}

if (!mysql_select_db("bbeclan_02")) {
   echo "Kann  Datenbank nicht auswählen: " . mysql_error();
   exit;
}
//Ende Verbindungsabfrage

$Name = $userdata['user_name']; //Name mit dem sich der User auf der HP eingeloggt hat
$Eins = 1; // Variable zum raufzählen (1,2,3,4,....)
$Bla = 0; // counter ob schon alle Clans durch gearbeitet sin ($Bla = $num_rows)
$My_id = 1; // ID des Clans (SELECT clan_id )
$result = mysql_query("SELECT * FROM Clan"); // holt alle Clans aus der DB
$num_rows = mysql_num_rows($result);  // zählt die Clans

While ($num_rows == $Bla) {       // soll prüfen ob er fertig ist

If ($num_rows == $Eins) { // wenn $num_rows = 1 dann Befehl nur einmal ausführen
$result = dbquery("SELECT name FROM Mitgliedschaften WHERE clan_id = 1"); // listet alle Mitglieder des Clans mit id $clan_id auf
while ($data = dbarray($result)) {
$Name2 = $data['name'];
$Memberzahl = $Memberzahl . $Eins; //je gefundenem Meber aus der DB Memberzähler + 1
$PPs2 = dbquery("SELECT betrag FROM Pimppoints WHERE user_name = '$Name2'"); // holt die aktuellen Punkte aus der DB
$pps_durchschnitt = $pps_durchschnitt . $PPs2; // fügt immer die Punkte jedes Spielers hinzu
}
$pps_durchschnitt = $pps_durchschnitt / $Memberzahl; // Durchschnitt wird errechnet
$query = "UPDATE Clan SET pps_durchschnitt = $pps_durchschnitt WHERE ID = clan_id"; // Durchschnitt wird in die DB eingetragen
$result = mysql_query($query);
$Bla = $Bla . $Eins; // counter + 1
}

Else {
$result = dbquery("SELECT name FROM Mitgliedschaften WHERE clan_id = $My_id"); // Variable kommt hinzu da $num_rows > 1 ==> id_anzahl > 1
while ($data = dbarray($result)) {
$Name2 = $data['name'];
$Memberzahl = $Memberzahl . $Eins;
$PPs2 = dbquery("SELECT betrag FROM Pimppoints WHERE user_name = '$Name2'");
$pps_durchschnitt = $pps_durchschnitt . $PPs2;
}
$pps_durchschnitt = $pps_durchschnitt / $Memberzahl;
$query = "UPDATE Clan SET pps_durchschnitt = $pps_durchschnitt WHERE ID = clan_id";
$result = mysql_query($query);
$Bla = $Bla . $Eins;
$My_id = $My_id . $Eins; // id + 1 um Clans nach id abzuarbeiten zuerst id 1 dann id 2 usw.
}
}
?>
Ich hoffe das war gut erklärt ansonsten fragt nochmal ;)
 
Lass dir den Durchschnitt doch von MySQL berechnen. Ich kann dir dabei zwar nicht wirklich weiterhelfen, doch ich denke, dass das möglich ist.
 
Hmmm wo könnte ich da denn nachschauen wie das geht ? Aber eigentlich muss es doch so auch gehen oder nicht ?
Und selbst wenn diese eine Sache nicht geht, muss er doch die adneren Sachen trotzdem eintragen oder ? Also woran kann es noch liegen ?
 
Zuletzt bearbeitet:
Lil-rich hat gesagt.:
Ich denke mal ihr könnt die Funktionsweise dann ja auch halb aus meinem Script lesen....

Das fällt allerdings sehr schwer. Hast du mein vorheriges Posting schon zur Kenntnis genommen? Den IF-Abzweig kannst du dir komplett schenken, da es nach den Gestzen der Logik nie vorkommen wird, dass etwas gleichzeitig TRUE und FALSE ist... das ist aber die Bedingung dort...nichts, was darinnen steht, wird jemals ausgeführt werden.


Diese Ganzen Berechnungen kannst du durch 2 Queries ersetzen...ein klein wenig kann MySQL ja auch :)

Liefert Anzahl verschiedener Clans:
Code:
select COUNT(DISTINCT clan_id) as clan_anzahl from clans

Liefert Paarweise ID des Clans und dessen Durchschnittspunkte:
Code:
select clan_id, AVG(spielerpunkte) as clan_durchschnitt from clans GROUP BY clan_id
 
Kannst du mir das bitte in einen PHP Befehl umwandeln wenns geht ? Sry aber ich mach das irgendwei immer falsch und bei Google find ich dazu nur Mist.... :D

Aber mir kommt das ein bisschen wenig vor...
-Spielerpunkte (für jeden Clan einzeln) aus DB auslesen
-Durchschnitt errechnen und in DB schreiben
-Spieler (für jeden Clan einzeln) zählen und in DB schreiben

Ist das da alles in den 2 Befehlen ? :D
 
Zurück