|
|
Özi Fachmann

Anmeldungsdatum: 06.10.2004 Beiträge: 157
|
Verfasst am: Mo 09 Jan, 2006 16:05 Titel: MySQL Abfrage |
|
|
|
Hallo zusammen,
ich habe diese Frage schon in einem MySQL Forum gepostet und erhielt keine Antwort.
Auf euch ist mehr verlaß.
Also ich hoffe Ihr könnt mir helfen.
Ich habe zwei Tabellen: (hier vereinfacht dargestellt)
1. teams
team_id
team_name
2. matches
game_id
team_a
team_b
results
In der Tabelle "matches" stehen in den Feldern "team_a" und "team_b" quasi nur die Nummern der Mannschaften, also "team_id".
Jetzt will ich eine Abfrage über beide Tabellen die mir in etwa folgendes Ergebnis liefert:
Spiel-Nr - Team A - Team B - Ergebnis
(hier sollen die Namen der Mannschaften stehen)
Ich hoffe ich konnte mich verständlich ausdrücken. _________________ Grüße Özi
Arzthomepage | Schreibbüro für Rechtsanwälte |
|
| Nach oben |
|
|
aspettl Fachmann

Anmeldungsdatum: 05.09.2004 Beiträge: 312
|
Verfasst am: Mo 09 Jan, 2006 16:19 Titel: |
|
|
|
Ich bin kein SQL-Profi und folgende Abfrage ist auch nicht getestet, müsste denke ich aber gehen:
| Code: | SELECT m.game_id, t1.team_name AS team_name_a, t2.team_name AS team_name_b, m.results
FROM matches AS m
JOIN teams AS t1 ON t1.team_id=m.team_a
JOIN teams AS t2 ON t2.team_id=m.team_b |
Gruß
Aaron _________________ Notebook |
|
| Nach oben |
|
|
Özi Fachmann

Anmeldungsdatum: 06.10.2004 Beiträge: 157
|
Verfasst am: Mo 09 Jan, 2006 16:36 Titel: |
|
|
|
Hallo Aaron,
habe es gerade ausprobiert.
Hat gleich beim ersten Versuch geklappt.
Nachträglich sieht alles so einfach aus. Ich hatte einfach nicht dran gedacht, daß die gleichen Tabellen verschiedene Alias Namen brauchen.
Super, vielen Dank ! _________________ Grüße Özi
Arzthomepage | Schreibbüro für Rechtsanwälte |
|
| Nach oben |
|
|
Özi Fachmann

Anmeldungsdatum: 06.10.2004 Beiträge: 157
|
Verfasst am: Mo 16 Jan, 2006 10:32 Titel: MySQL Abfrage verschachteln |
|
|
|
Hallo Aaron,
Du hast mir beim letzten Mal so gut geholfen.
Ich stecke nun wieder fest und hoffe Du kannst mir wieder helfen. Falls nicht, kennst Du vielleicht jemanden.
Diesmal ist es etwas Anspruchsvoller.
Praktische Anwendung: Es geht um Fussball.
Ich habe eine Tabelle "matches" mit nur 5 Feldern:
match_id, team_a, team_b, goals_team_a, goals_team_b
Ich glaube, da brauche ich nicht viel erklären. In team_a und team_b steht jeweils nur die Nummer des teams. Habe noch eine Tabelle aus der dann der Name, Flagge usw. hervorgeht. Das ist jetzt aber unwichtig.
Ziel ist es mit einer Abfrage über diese Tabelle etwa folgendes Ergebnis zu bekommen:
team, spiele, punkte, siege, remis, verloren, tore+, tore-, tordifferenz
Um es mir einfacher zu machen, habe ich das ganze kurz in MS-Access nachgebaut und es funktioniert.
Habe dann den SQL-Code übernommen.
In Kürze:
Mein Problem ist nun, daß ich in Access eine Abfrage über eine Abfrage machen kann. Ich weiß aber nicht wie und ob das auch in SQL geht.
Hier kannst Du mein Abfrage Ergebnis sehen:
http://www.aslicam.de/results.php
Ich müsste jetzt eigentlich nur noch eine zweite Abfrage über eben diese Abfrage machen und nach team gruppieren und die restlichen Felder einfach summieren. Dann wäre ich fertig und es wäre perfekt.
Ich verwende nämlich eine Union Abfrage und daher kommt ein team öfters im Abfrageergebnis vor. Deshalb müsste ich es nochmal gruppieren.
Und hier der SQL Code: (Tabellen und Feldnamen können etwas von dem obigen Beispiel abweichen)
| Code: | SELECT t1.group as gruppe, t1.flag as flagge, t1.team as Mannschaft, matches.team_a AS team, Sum( matches.goals_team_a ) AS 'T+', Sum(matches.goals_team_b) AS 'T-', Sum( matches.goals_team_a ) - Sum(matches.goals_team_b) AS Diff, Sum(If(goals_team_a > goals_team_b,1,0)) + Sum(If(goals_team_a = goals_team_b ,1,0)) + Sum(If(goals_team_b > goals_team_a ,1,0)) AS matches, Sum(If(goals_team_a > goals_team_b,1,0)) AS G, Sum(If(goals_team_a = goals_team_b ,1,0)) AS U, Sum(If(goals_team_b > goals_team_a ,1,0)) AS V, Sum(If(goals_team_a > goals_team_b,1,0)) * 3 + Sum(If(goals_team_a = goals_team_b ,1,0)) * 1 AS Pkt
FROM matches
JOIN afrika_cup_2006_teams as t1 on t1.team_id = matches.team_a
GROUP BY matches.team_a
UNION ALL SELECT t2.group as gruppe, t2.flag as flagge, t2.team as Mannschaft, matches.team_b AS team, Sum(matches.goals_team_b) AS 'T+', Sum(matches.goals_team_a) AS 'T-', Sum( matches.goals_team_b ) - Sum(matches.goals_team_a) AS Diff, Sum(If(goals_team_a > goals_team_b,1,0)) + Sum(If(goals_team_a = goals_team_b ,1,0)) + Sum(If(goals_team_b > goals_team_a ,1,0)) AS matches, Sum(If(goals_team_b>goals_team_a,1,0)) AS G, Sum(If(goals_team_a=goals_team_b,1,0)) AS U, Sum(If(goals_team_a>goals_team_b,1,0)) AS V, Sum(If(goals_team_b>goals_team_a,1,0)) * 3 + Sum(If(goals_team_a=goals_team_b,1,0)) * 1 AS Pkt
FROM matches
JOIN afrika_cup_2006_teams as t2 on t2.team_id = matches.team_b
GROUP BY matches.team_b |
Würde mich echt über Deine Hilfe freuen. Wenn das Script einmal läuft, ist es genial. Mann kann es dann für alle Fussballmeisterschaften verwenden. _________________ Grüße Özi
Arzthomepage | Schreibbüro für Rechtsanwälte |
|
| Nach oben |
|
|
Özi Fachmann

Anmeldungsdatum: 06.10.2004 Beiträge: 157
|
Verfasst am: Mo 16 Jan, 2006 11:34 Titel: |
|
|
|
Hallo,
habe mein Problem jetzt etwas vereinfacht und übersichtlicher dargestellt.
SQL-Code:
| Code: | SELECT matches.team_a AS team,
Sum( matches.goals_team_a ) AS 'T+',
Sum(matches.goals_team_b) AS 'T-',
Sum(If(goals_team_a > goals_team_b,1,0)) AS G,
Sum(If(goals_team_a = goals_team_b ,1,0)) AS U,
Sum(If(goals_team_b > goals_team_a ,1,0)) AS V
FROM matches
GROUP BY matches.team_a
UNION ALL SELECT matches.team_b AS team,
Sum(matches.goals_team_b) AS 'T+',
Sum(matches.goals_team_a) AS 'T-',
Sum(If(goals_team_b>goals_team_a,1,0)) AS G,
Sum(If(goals_team_a=goals_team_b,1,0)) AS U,
Sum(If(goals_team_a>goals_team_b,1,0)) AS V
FROM matches
GROUP BY matches.team_b |
Abfrageergebnis: http://www.aslicam.de/results2.php
Es geht mir nur darum dieses Abfrageergebnis nochmal nach team zu gruppieren und die restlichen Felder zu summieren.
G steht für gewonnen
U steht für unentschieden
V steht für verloren
T+ geschossene Tore
T- erhaltene Tore _________________ Grüße Özi
Arzthomepage | Schreibbüro für Rechtsanwälte |
|
| Nach oben |
|
|
Özi Fachmann

Anmeldungsdatum: 06.10.2004 Beiträge: 157
|
Verfasst am: Mo 16 Jan, 2006 13:52 Titel: |
|
|
|
Hallo,
vergesst es, ich habe es doch selber hinbekommen.
Bin halt doch ein Genie !
Hier das Ergebnis: http://www.aslicam.de/results3.php
Die Lösung: Abfragen verschachtelt man einfach wie folgt:
SELECT feld_a, feld_b etc.,
FROM (Hier kommt in Klammern die ABFRAGE beginnned mit SELECT)
GROUP BY
ORDER BY
usw.
Ich wußte eben nicht daß man die Abfrage einfach hinter FROM in klammern setzt.
Klappt jetzt wunderbar. _________________ Grüße Özi
Arzthomepage | Schreibbüro für Rechtsanwälte |
|
| Nach oben |
|
|
aspettl Fachmann

Anmeldungsdatum: 05.09.2004 Beiträge: 312
|
Verfasst am: Mo 16 Jan, 2006 14:25 Titel: |
|
|
|
| Özi hat Folgendes geschrieben: | | Ich wußte eben nicht daß man die Abfrage einfach hinter FROM in klammern setzt. |
Ja, das geht - allerdings erst ab MySQL 4.1, vorher werden Subselects nicht unterstützt.
Gruß
Aaron _________________ Notebook |
|
| Nach oben |
|
|
Özi Fachmann

Anmeldungsdatum: 06.10.2004 Beiträge: 157
|
Verfasst am: Mo 16 Jan, 2006 14:45 Titel: |
|
|
|
Hi Aaron,
habe gerade mal in PHPMyAdmin nachgeschaut.
Habe die Version MySQL 4.1.15
Gott sei Dank.
Jetzt können die Fussball Spiele beginnen. Ich bin gewappnet.
Alles Gute..  _________________ Grüße Özi
Arzthomepage | Schreibbüro für Rechtsanwälte |
|
| Nach oben |
|
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|
|