Vergleichen per SQL oder PHP ? |
Beckebans
Alternativ Mitglied
Dabei seit: 10.07.05
Beiträge: 481
Fähigkeiten: WBB Lite 1 Fortgeschritten Herkunft: Paderborn Forenversion: Lite 1.0
|
|
Ich habe in der Datenbank-Tabelle 'bb1_clanwar' die Felder 'Ergebnis_Map_1', 'Ergebnis_Map_2' und 'Ergebnis_Map_3'.
Die Felder 'Ergebnis_Map_1' und 'Ergebnis_Map_2' haben immer einen Inhalt, das Feld 'Ergebnis_Map_3' manchmal.
Das Format dabei: "Punkte wir : Punkte Gegner"
Inhalt von Datensatz 1...
- Ergebnis_Map_1: 12:20
- Ergebnis_Map_2: 45:51
- Ergebnis_Map_3: leer
Inhalt von Datensatz 2...
- Ergebnis_Map_1: 50:00
- Ergebnis_Map_2: 26:21
- Ergebnis_Map_3: leer
Inhalt von Datensatz 3...
- Ergebnis_Map_1: 52:15
- Ergebnis_Map_2: 49:50
- Ergebnis_Map_3: 13:12
Inhalt von Datensatz 4...
- Ergebnis_Map_1: 24:53
- Ergebnis_Map_2: 52:11
- Ergebnis_Map_3: leer
Ich möchte auf einer Forenseite (wbblite1, sollte aber keine Rolle spielen, oder?) jetzt die Gesamtergebnisse anzeigen lassen.
Kurze Erklärung:
Beim ersten Datensatz, Ergebnis_Map_1 wären das zum Beispiel 12 Punkte für uns und 20 Punkte für die Gegner. Wir hätten verloren, macht ein 0:1.
Beim ersten Datensatz, Ergebnis_Map_2 wären das dann 45 Punkte für uns und 51 Punkte für die Gegner. Wir hätten wieder verloren, macht wieder ein 0:1.
Beim ersten Datensatz, Ergebnis_Map_3 steht nichts drin, ist also unwichtig und wird ignoriert.
Als Gesamtergebniss kommt dann also ein 0:2 (alle zusammengerechnet) raus. Das möchte ich so haben
Beim ersten Datensatz kommt ein 0:2 raus, beim zweiten Datensatz ein 2:0, beim dritten Datensatz ein 2:1 und beim vierten Datensatz ein 1:1.
Was ist dabei besser oder einfacher? SQL oder PHP oder ne Mischung aus beiden? Und wie gehts? Dass SQL vergleichen kann habe ich schon gelesen, aber bringt das hier was und ist das sinnvoll? Per PHP vergleichen sollte ja kein Problem darstellen.
__________________ Meine Hacks:
- Userpage
- Geburtstagsliste
- Beitrag bedanken
- User verlinken
- PHP-Fehler anzeigen
- Umfragedauer
- Neue Beiträge während Eigenem
- Gruppenspezifische Mitgliederliste
- und weitere...
|
|
09.10.08 21:27 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
[kamui]
~
Dabei seit: 27.04.05
Beiträge: 2.992
|
|
Sowas regelt man mit PHP, SQL dient zur Abfrage der Daten aus der Datenbank
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
|
$we = 0;
$they = 0;
$match1 = "14:2";
$match2 = "5:18";
$match3 = "7:9";
$match1 = explode(":", $match1);
if ($match1[0] > $match1[1]) $we++; # dein team hat gewonnen
elseif ($match[1] > $match[0]) $they++; # gegnerisches team hat gewonnen
else
{
#unentschieden
}
$match2 = explode(":", $match2);
if ($match2[0] > $match2[1]) $we++; # dein team hat gewonnen
elseif ($match2[1] > $match2[0]) $they++; # gegnerisches team hat gewonnen
else
{
#unentschieden
}
$match3 = explode(":", $match3);
if ($match3[0] > $match3[1]) $we++; # dein team hat gewonnen
elseif ($match3[1] > $match3[0]) $they++; # gegnerisches team hat gewonnen
else
{
#unentschieden
}
echo "$we:$they"; # 1:2 |
|
So würde ich das Regeln
Habe absichtlich eigene Varaiblen verwendet, aber sollte ja kein Problem sein das auf dein Vorhaben zu konkretisieren. Da sich die Abfrage mit dem explode und > wiederholt würde sich sogar anbieten dies in eine Funtkion zu packen ...
|
|
09.10.08 22:07 |
Finden
Als Freund hinzufügen
|
|
Maniac_81
PHP Profi
Dabei seit: 27.06.06
Beiträge: 2.087
Fähigkeiten: WBB3 Anfänger; WBB2 Profi Herkunft: localhost/ Forenversion: 2.3; Lite 2.0
|
|
und genau das ist falsch
sowas kann man ganz einfach mit SQL lösen wenn du die richtige datenbank struktur hast.
Ich habe bei mir zb. eine liga-tabelle mit allen wertden nachdenen sortiert wird nur durch SQL berechnen lassen. war zwar ne mächtige abfrage, aber sie ist schnell und effektiv.
Bei mir werden zb alle heimpunkte und gegenpunkte berechnet. sprich, ob ich als auswärtsteam gepunktet habe oder als heimteam. dann wird berechnet wieviele sätze ich gewonnen habe als heim und auswärts. wieviele spiele jemand gemacht. die differenzen beider punkte werden auch berechnet und sortiert nach dem normalen muster.
1. Sortierungspunkt: differenz zwischen Plus und Minuspunkten
2. Sortierungspunkt: wieviel spiele man gemacht hat
3. Sortierungspunkt: differenz der sätze
Also wenn Punktegleichheit besteht, wird geschaut ob einer der jenigen weniger spiele hat, der ist dann natürlich vorne. wenn das auch noch gleich ist, dann wird nach sätzen sortiert.
Handelt sich um eine Dart-Liga Tabelle
php: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
|
SELECT
t.teamname,
@heimpunkte := (SELECT sum(s.heimpunkte) FROM spiele s WHERE s.heimteam = t.id GROUP BY t.id LIMIT 1) heimpunkte,
@gastpunkte := (SELECT sum(s.gastpunkte) FROM spiele s WHERE s.gastteam = t.id GROUP BY t.id LIMIT 1) gastpunkte,
@heimgegen := (SELECT sum(s.heimpunkte) FROM spiele s WHERE s.gastteam = t.id GROUP BY t.id LIMIT 1) heimpgegen,
@gastgegen := (SELECT sum(s.gastpunkte) FROM spiele s WHERE s.heimteam = t.id GROUP BY t.id LIMIT 1) gastgegen,
@heimspiele := (SELECT sum(s.spiele_heim) FROM spiele s WHERE s.heimteam = t.id GROUP BY t.id LIMIT 1) heimspiele,
@gastspiele := (SELECT sum(s.spiele_gast) FROM spiele s WHERE s.gastteam = t.id GROUP BY t.id LIMIT 1) gastspiele,
@heimgegenspiele := (SELECT sum(s.spiele_heim) FROM spiele s WHERE s.gastteam = t.id GROUP BY t.id LIMIT 1) heimgegenspiele,
@gastgegenspiele := (SELECT sum(s.spiele_gast) FROM spiele s WHERE heimteam = t.id GROUP BY t.id LIMIT 1) gastgegenspiele,
@spiele_all := (@heimspiele + @gastspiele) spiele_all,
@gegen_all := (@heimgegenspiele + @gastgegenspiele) gegen_all,
@spiele_diff := (@spiele_all - @gegen_all) spiele_diff,
@heim_all := (@heimpunkte + @gastpunkte) heim_all,
@gast_all := (@heimgegen + @gastgegen) gast_all,
@punkte_diff := (@heim_all - @gast_all) punkte_diff,
@tuniere := (SELECT count(s.id) FROM spiele s WHERE s.gastteam = t.id OR s.heimteam = t.id GROUP BY t.id LIMIT 1) tuniere
FROM
teams t
WHERE
t.liga_id=$liga AND t.aktiv=1
GROUP BY
t.id
ORDER BY
punkte_diff DESC,
tuniere ASC,
spiele_diff DESC |
|
diese kann beliebig erweitert werden oder nach mehr kriterien sortiert wrden. SQL ist sehr mächtig was das angeht.
__________________ zufrieden mit meinem Support? dann hier bitte bewerten!
Sie haben 3 gelbe Bananen gewählt!
ÄPFEL! 3!!!
|
|
10.10.08 09:55 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
Beckebans
Alternativ Mitglied
Dabei seit: 10.07.05
Beiträge: 481
Fähigkeiten: WBB Lite 1 Fortgeschritten Herkunft: Paderborn Forenversion: Lite 1.0
Themenstarter
|
|
Klappt super, danke euch allen
__________________ Meine Hacks:
- Userpage
- Geburtstagsliste
- Beitrag bedanken
- User verlinken
- PHP-Fehler anzeigen
- Umfragedauer
- Neue Beiträge während Eigenem
- Gruppenspezifische Mitgliederliste
- und weitere...
|
|
10.10.08 18:24 |
E-Mail
WWW
Finden
Als Freund hinzufügen
|
|
|