Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Die 10 höchsten Siege.... [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Die 10 höchsten Siege....


 
capsfan
02-01-2002, 01:04 
 
Hallihallo!
Wünsche allen noch nachträglich ein schönes neues Jahr!

Das heutige Problem beschäftigt mich schon einige Tage und ich finde irgendwie nicht den richtigen Ansatz dafür.
Vielleicht könnt ihr mir dabei helfen...

Ich habe eine Tabelle, in der die Spielergebnisse meines Lieblingsvereins gespeichert sind.
Unter anderem eben auch die gefallenen Tore.
Die Tore befinden sich allerdings, um den Zugriff für andere statistische Berechnungen zu haben, in zwei Feldern
( sthom und stgeg).

while ($i < $number) {
$row = MYSQL_FETCH_ARRAY($result);
$id = $row["id"];
$snr = $row["snr"];
$sday = $row["sday"];
$smon = $row["smon"];
$sjahr = $row["sjahr"];
$sgegner = $row["sgegner"];
$swhere = $row["swhere"];
$stgeg = $row["stgeg"];
$sthom = $row["sthom"];
$st1geg = $row["st1geg"];
$st1hom = $row["st1hom"];
$st2geg = $row["st2geg"];
$st2hom = $row["st2hom"];
$st3geg = $row["st3geg"];
$st3hom = $row["st3hom"];
$bemerkungen = $row["snote"];

$difftemp1 = $sthom - $stgeg;

if ($difftemp1 > $sieg) {
$sieg = $difftemp1;
$siegsnr = $snr;
$siegday = $sday;
$siegmon = $smon;
$siegjahr = $sjahr;
$sieggegner = $sgegner;
$siegwhere = $swhere;
$siegtgeg = $stgeg;
$siegthom = $sthom;
$siegt1geg = $st1geg;
$siegt1hom = $st1hom;
$siegt2geg = $st2geg;
$siegt2hom = $st2hom;
$siegt3geg = $st3geg;
$siegt3hom = $st3hom;
$siegnotes = $bemerkungen;}
}
Dieser Codeschnipsel liest mir zuverlässig den höchten Sieg aus, aber wie komme ich zu den höchten 10 Siegen, also den 10 höchsten Differenzen...

capsfan
http://database.capsfans.de

 
KinNeko
02-01-2002, 02:25 
 
Wenn du das ganze schon in einer Datenbank speicherst solltest du die Berechnung der Datenbank selbst überlassen..wegen der Anfrageoptimierung.

So wie ich das (um die Uhrzeit noch) verstehe entspricht der code der datenbankanfrage :
SELECT * FROM tablename WHERE MAX( sthom - stgeg )

und demnach würde die entsprechene Anfrage für deine Frage lauten
SELECT * FROM tablename ORDER BY ( sthom - stgeg ) LIMIT 0,10

Morgen früh dürfen mich dann die echten Profis berichtigen..
Gute Nacht..

 
capsfan
02-01-2002, 03:35 
 
Klingt logisch...
Probiere das aber auch erst nachdem Schlafen aus...
capsfan

 
KinNeko
02-01-2002, 10:10 
 
Erweiterung :
SELECT *, (sthom- stgeg) as sieg FROM tablename WHERE MAX( sthom - stgeg )

Jetzt kannst du auch auf row["sieg"] zugreifen..

 
capsfan
02-01-2002, 23:56 
 
Aber mit LIMIT hinten dran, nicht wahr?

capsfan

P.S.: Komme erst jetzt zum probieren...

 
KinNeko
03-01-2002, 01:38 
 
Mit der select anweisung nimmt er nur den wert der maximal ist..bzw mehrere wenn sthom-stgeg gleich sind

 
capsfan
03-01-2002, 03:02 
 
Also:

Der Select funktioniert einwandfrei... nur verkehrtherum, wie ich feststellen musste.
So lieferte (sthom-stgeg) LIMIT 0,10 die 10 höchsten Niederlagen und (stgeg - sthom) LIMIT 0,10 die höchsten Siege. Anstatt die Werte zu vertauschen hätte man dann auch mit DESC arbeiten können.
Um die torreichsten Spiele auszufiltern, muss bei (sthom+stgeg) sogar DESC eingfügt werden, sonst erhält man die torärmsten Spiele.
Das hängt offenbar mit der alphabetischen Reihenfolge zusammen.
Danke also für deine Hilfe, als (relativer) Anfänger übersieht man häufig die Möglichkeiten des SELECT-Befehls, zumal man selten in einer Doku alle Varianten beisammen findet!

Das Ergebnis: http://database.capsfans.de/index.php?sid=legends

capsfan

Hier noch die nun verwendeten SELECTS:
$query = 'SELECT * FROM capsdbspiele ORDER BY ( stgeg - sthom ) LIMIT 0,10';
$query = 'SELECT * FROM capsdbspiele ORDER BY ( sthom - stgeg ) LIMIT 0,10';
$query = 'SELECT * FROM capsdbspiele ORDER BY ( stgeg + sthom ) desc LIMIT 0,10';

[Editiert von capsfan am 03-01-2002 um 03:06]

 
JoelH
03-01-2002, 06:31 
 
Noe, das hat nix mit alphabethischer Reihenfolge zu tun sondern mit der default Einstellung der ORDER BY Anweisung, die ist nämlich ASC.

 
capsfan
03-01-2002, 14:03 
 
Richtig!
Und deshalb sortiert er A vor B und 1 vor 10, weil's alphabetisch ist...

capsfan

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:14 Uhr.