promotionsite forum



 
MySQL Abfrage
Gehe zu Seite 1, 2  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    Suchmaschinen Einsteiger Suchmaschinenoptimierung Forum // Programmieren für Anfänger
 
Autor Nachricht
Özi
Fachmann
Fachmann


Anmeldungsdatum: 06.10.2004
Beiträge: 157

BeitragVerfasst 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
aspettl
Fachmann
Fachmann


Anmeldungsdatum: 05.09.2004
Beiträge: 312

BeitragVerfasst 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Özi
Fachmann
Fachmann


Anmeldungsdatum: 06.10.2004
Beiträge: 157

BeitragVerfasst 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Özi
Fachmann
Fachmann


Anmeldungsdatum: 06.10.2004
Beiträge: 157

BeitragVerfasst 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Özi
Fachmann
Fachmann


Anmeldungsdatum: 06.10.2004
Beiträge: 157

BeitragVerfasst 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Özi
Fachmann
Fachmann


Anmeldungsdatum: 06.10.2004
Beiträge: 157

BeitragVerfasst 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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
aspettl
Fachmann
Fachmann


Anmeldungsdatum: 05.09.2004
Beiträge: 312

BeitragVerfasst 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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Özi
Fachmann
Fachmann


Anmeldungsdatum: 06.10.2004
Beiträge: 157

BeitragVerfasst 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.. Very Happy
_________________
Grüße Özi
Arzthomepage | Schreibbüro für Rechtsanwälte
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Neues Thema eröffnen   Neue Antwort erstellen    Suchmaschinen Einsteiger Suchmaschinenoptimierung Forum // Programmieren für Anfänger Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
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.

Thema Autor Forum Antworten Verfasst am
Keine neuen Beiträge MySQL und phpBB mit Contentmanagement fligor Suchmaschinen Tools 2 Fr 24 Jun, 2005 16:27 Letzten Beitrag anzeigen
Keine neuen Beiträge Free Webspace mit PHP und MYSQL ::APOCALYPSE:: Off Topic 4 Di 15 Feb, 2005 01:36 Letzten Beitrag anzeigen
Keine neuen Beiträge VB6 Zugriff auf mysql madonnari Programmieren für Anfänger 9 Mo 31 Jan, 2005 18:04 Letzten Beitrag anzeigen
Keine neuen Beiträge MySql DB optimieren Michael Beier Programmieren für Anfänger 6 Do 28 Okt, 2004 11:22 Letzten Beitrag anzeigen
Keine neuen Beiträge Pagerank-Abfrage Script (ohne Google Toolbar) UserMan Einsteigerfragen Suchmaschinenoptimierung 5 Di 03 Aug, 2004 13:54 Letzten Beitrag anzeigen

Impressum
Powered by phpBB
proud member od backlink4beer.com
Spanish Property / Tokio Hotel / Webdesign Forum Domrep
/ Computer Hilfe
Stellenmarkt >Spain property Costa Blanca / Top10-Seo /Windows Tricks
Bill Tom Fanpage Tokio Hotel
Ein optimiertes gratis Forum mit vielen Features gibts bei Iphpbb