SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

TYPO3 Kochbuch

TYPO3 Kochbuch zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 11.01.2013, 19:01:36
mysqller mysqller ist offline
Anfänger
 
Registriert seit: May 2011
Alter: 24
Beiträge: 5
Abfrage mit JOIN und GROUP BY

Hallo, ich möchte durch eine SQL-Abfrage folgende zwei Tabellen miteinander verbinden, damit ein Ranking entsteht.

1. Tabelle spiele:

Code:
CREATE TABLE `spiele` (
 `spielid` int(11) NOT NULL AUTO_INCREMENT,
 `spieleridh` int(11) NOT NULL,
 `spielerida` int(11) NOT NULL,
 `toreh` int(11) NOT NULL,
 `torea` int(11) NOT NULL,
 `eintragid` int(11) NOT NULL,
 PRIMARY KEY (`spielid`)
) ENGINE=MyISAM AUTO_INCREMENT=24 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
spielid : ID eines ausgetragenen Spiels, welches immer mit 10 Toren endet.
spieleridh : ID des Benutzers der Heimrecht hatte
spielerida : ID des Benutzers der auswärts gespielt hat
toreh: Geschossene Tore des Heim-Spielers
toreh: Geschossene Tore des Auswärts-Spielers
eintragid: hier nicht relevant

Code:
INSERT INTO `spiele` (`spielid`, `spieleridh`, `spielerida`, `toreh`, `torea`, `eintragid`) VALUES
(1, 1, 0, 10, 9, 1),
(2, 0, 2, 10, 5, 2),
(3, 2, 1, 10, 9, 4);
2. Tabelle benutzer:

Code:
CREATE TABLE `benutzer` (
 `benutzerid` tinyint(4) NOT NULL,
 `vollname` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 `username` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 `passwort` varchar(40) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`benutzerid`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1 COLLATE=latin1_german2_ci
Code:
INSERT INTO `benutzer` (`benutzerid`, `vollname`, `username`, `passwort`) VALUES
(0, 'Anton Ausgefuchst', 'anton82', 'ca46c98a029ee5e7b50d24938a6a0e3d'),
(1, 'Berta Begabt', 'berta_bsc', 'ab31caa6ef5359077abed6b118812034'),
(2, 'Charlotte Clever', 'cClever', '00b86e77b9f76fc1f466555b6af345f8');
Nun schaffe ich es mit folgender SQL-Anfrage eine Rangliste zu generieren, die auf den Heimtoren basiert.

Code:
SELECT b.username, SUM(toreh) AS heimtore
FROM benutzer b
LEFT JOIN spiele s ON s.spieleridh = b.benutzerid
GROUP BY b.benutzerid
ORDER BY heimtore DESC
Ich will in der Aufsummierung allerdings sowohl Heim, als auch Auswärtstore addiert haben. Für die Auswärtstore könnte ich natürlich analog formulieren:
Code:
SELECT b.username, SUM(torea) AS auswtore 
FROM benutzer b
LEFT JOIN spiele s ON s.spielerida = b.benutzerid
GROUP BY b.benutzerid
ORDER BY auswtore DESC
Irgendwie komme ich aber nicht drauf, wie ich die Werte in einer Spalte addieren soll. Ich kann die beiden Abfragen ja mit einem UNION verbinden, aber das bringt ja auch nicht weiter, oder?

Kann mir jemand sagen, wie ich die Anfrage stellen müsste?

Geändert von mysqller (11.01.2013 um 19:03:26 Uhr) Grund: typo
Mit Zitat antworten
  #2  
Alt 14.01.2013, 19:11:36
mysqller mysqller ist offline
Anfänger
 
Registriert seit: May 2011
Alter: 24
Beiträge: 5
AW: Abfrage mit JOIN und GROUP BY

War die Frage evtl. zu schwer oder zu langweilig?
Hat hier keiner 'ne Idee? Oder bin ich zu ungeduldig?
Mit Zitat antworten
  #3  
Alt 19.01.2013, 13:28:22
mysqller mysqller ist offline
Anfänger
 
Registriert seit: May 2011
Alter: 24
Beiträge: 5
AW: Abfrage mit JOIN und GROUP BY

Die Resonanz hier im Forum hätte ja noch Luft nach oben gehabt...

Ich habe inzwischen selbst folgende Lösung gefunden, vielleicht hilft es ja mal jemandem weiter:

Code:
SELECT A.username,COALESCE(heimtore, 0)+COALESCE(auswtore, 0) AS TORE FROM
(SELECT b.username, SUM(toreh) AS heimtore
FROM benutzer b
LEFT JOIN spiele s ON s.spieleridh = b.benutzerid
GROUP BY b.benutzerid) AS A,

(SELECT b.username, SUM(torea) AS auswtore
FROM benutzer b
LEFT JOIN spiele s ON s.spielerida = b.benutzerid
GROUP BY b.benutzerid) AS B

WHERE B.username=A.username
ORDER BY TORE DESC
Mit Zitat antworten
Antwort

Stichworte
group by, highscore, join


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Reihenfolge nach JOIN / GROUP BY festlegen c-bob MySQLi/PDO/(MySQL) 9 15.11.2010 08:33:50
Sortierung einer Inner Join Abfrage mit Group By Klausel Oskar MySQLi/PDO/(MySQL) 1 31.08.2010 22:56:29
Performance von INNER JOIN Abfrage erhöhen - Vorschläge? Timbob MySQLi/PDO/(MySQL) 4 05.03.2009 09:29:18
INNER JOIN, GROUP BY und ... schwer zu erklären abyss MySQLi/PDO/(MySQL) 2 15.06.2008 10:38:22
Performance bei Abfrage inner join Tikiwiki MySQLi/PDO/(MySQL) 7 21.02.2006 09:46:50


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:12:03 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt