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

|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP 
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren |

08.09.2010, 12:41:29
|
Anfänger
|
|
Registriert seit: Sep 2010
Alter: 36
Beiträge: 4
|
|
Habe ein problem mit MySQL
Hallo alle zusammen,
Habe folgendes Problem. Ich bin zurzeit dabei eine Internet Seite zu bauen die die Tabelle der Bundesliga anzeigt. Ich habe folgende Tabellen:
Tabelle spiel:
id, (primary key)
spieltagID,
heimmannschaftID, (foreign key mannschaft)
gastmannschaftID, (foreign key mannschaft)
spielbeginn,
toreHeim,
toreGast,
spielStatus
und Tabelle mannschaft:
id, (primary key)
name,
kuerzel
Was ich nun versuche ist die toreHeim und toreGast für jede Mannschaft zusammen zu zählen und aus zu lesen. Sprich denn in der Tabelle HSV:Berlin 3:2 und HSV:Hannover 2:2 gespielt hat muss in der end Tabelle HSV 5:4 Tore haben und 4 Punkte, Berlin 2:3 Tore und 0 Punkte und Hannover 2:2 mit 1 punkt.
Nun habe ich schon das halbe Internet durch sucht auch ab und an was gefunden war aber leider nicht in der Lage es auf meine Tabellen Strukturen umzubauen. Was ich Bräuchte wäre ein MySQL_query oder Statement das mir das ausrechnet.
Kann mir einer weiter helfen, oder mir sagen wie so ein Statement aufgebaut wird?
Vielen Dank für alle antworten
|

08.09.2010, 13:02:28
|
Anfänger
|
|
Registriert seit: Aug 2010
Alter: 44
Beiträge: 27
|
|
AW: Habe ein problem mit MySQL
Da es 2 verschiedene Konstellationen gibt (Heim und Auswärtsspiel) benötigst du ein UNION:
Code:
SELECT heim.toreHeim+gast.toreGast as toreErzielt, heim.toreGast+gast.toreHeim as toreBekommen FROM
(SELECT SUM(toreHeim) as toreHeim, SUM(toreGast) as toreGast FROM spiel WHERE heimmannschaftId=123) heim
UNION
(SELECT SUM(toreHeim) as toreHeim, SUM(toreGast) as toreGast FROM spiel WHERE gastmannschaftId=123) gast
Für die Berechnung der Punkte brauchst du ebenfalls ein solches Statement. Probierst du dich selber daran?
|

08.09.2010, 13:05:27
|
Anfänger
|
|
Registriert seit: Sep 2010
Alter: 36
Beiträge: 4
|
|
AW: Habe ein problem mit MySQL
Waow danke, hätte nicht gedacht dass das so schnell geht. Ja sowas ähnliches hatte ich schon mal gesehen. Vielen Dank noch mal dann versuche ich mich mal an die punkte. :D
|

10.09.2010, 13:07:35
|
Anfänger
|
|
Registriert seit: Sep 2010
Alter: 36
Beiträge: 4
|
|
AW: Habe ein problem mit MySQL
Moin, habe dein script heute mal eingebaut und versuch zum laufen zubekommen. Bekomme aber leider in mysql syntax error:
"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'gast' at line 4 "
bin mir jetzt nich ganz sicher was ich da machen muss? kannst mir da noch mal helfen?
Danke
p.s. das ist was ich für die punkte berechnung habe
SELECT
(
SELECT
SUM(IF(toreHeim>toreGast,3,IF(toreHeim<toreGast,0,1)))
FROM
spiel
WHERE
heimmannschaftID = MANNSCHAFTS_ID
)
+
(
SELECT
SUM(IF(toreGast>toreHeim,3,IF(toreGast<toreHeim,0,1)))
FROM
spiel
WHERE
gastmannschaftID = MANNSCHAFTS_ID
)
|

10.09.2010, 13:24:12
|
Anfänger
|
|
Registriert seit: Aug 2010
Alter: 44
Beiträge: 27
|
|
AW: Habe ein problem mit MySQL
Das Query ist wieder ungetestet, aber sollte besseren Dienst tun:
Code:
SELECT SUM(toreHeim) as toreErzielt, SUM(toreGast) as toreBekommen FROM (
(SELECT SUM(toreHeim) as toreHeim, SUM(toreGast) as toreGast FROM spiel WHERE heimmannschaftId=123)
UNION
(SELECT SUM(toreHeim) as toreGast, SUM(toreGast) as toreHeim FROM spiel WHERE gastmannschaftId=123)
)
|

10.09.2010, 15:46:45
|
Junior Member
|
|
Registriert seit: Aug 2010
Alter: 15
Beiträge: 395
|
|
AW: Habe ein problem mit MySQL
Zitat:
Zitat von Lordwurst
Hallo alle zusammen,
Habe folgendes Problem. Ich bin zurzeit dabei eine Internet Seite zu bauen die die Tabelle der Bundesliga anzeigt. Ich habe folgende Tabellen:
|
Dazu mal eine alternative Idee. Ich habe mal versucht, alle Daten komplett mit einem SQL zu ermitteln und auszugeben.
Testdaten:
Code:
CREATE TABLE mannschaft (
id INT NOT NULL,
name VARCHAR(50) NOT NULL,
kurzel VARCHAR(10) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO mannschaft VALUES
( 1, 'HSV','HSV'),
( 2, 'Berlin','B'),
( 3, 'Hannover','H');
CREATE TABLE spieltag (
id INT NOT NULL,
spieltagID INT NOT NULL,
heimmannschaftID INT NOT NULL,
gastmannschaftID INT NOT NULL,
spielbeginn TIME,
toreHeim INT NOT NULL,
toreGast INT NOT NULL,
spielStatus INT,
PRIMARY KEY (id),
CONSTRAINT fk_spieltag_01
FOREIGN KEY (heimmannschaftID)
REFERENCES mannschaft (id),
CONSTRAINT fk_spieltag_02
FOREIGN KEY (gastmannschaftID)
REFERENCES mannschaft (id)
);
INSERT INTO spieltag VALUES
(1 , 1, 1, 2, NULL, 3, 2, 0),
(2 , 2, 1, 3, NULL, 2, 2, 0);
Zitat:
Zitat von Lordwurst
Was ich nun versuche ist die toreHeim und toreGast für jede Mannschaft zusammen zu zählen und aus zu lesen. Sprich denn in der Tabelle HSV:Berlin 3:2 und HSV:Hannover 2:2 gespielt hat muss in der end Tabelle HSV 5:4 Tore haben und 4 Punkte, Berlin 2:3 Tore und 0 Punkte und Hannover 2:2 mit 1 punkt.
|
Dazu folgenden SQL, er ist ein bißchen größer geworden. Meiner Meinung müßte das Tabellenmodell weiter normalisiert werden.
Code:
SELECT name,
COALESCE(heim.tore_erzielt,0) + COALESCE(gast.tore_erzielt,0) AS tore_erzielt,
COALESCE(heim.tore_bekommen,0) + COALESCE(gast.tore_bekommen,0) AS tore_bekommen,
punkte.punkte
FROM mannschaft m
LEFT JOIN ( SELECT heimmannschaftID,
SUM(toreHeim) AS tore_erzielt,
SUM(toreGast) AS tore_bekommen
FROM spieltag
GROUP BY heimmannschaftID ) heim
ON m.id = heim.heimmannschaftID
LEFT JOIN ( SELECT gastmannschaftID,
SUM(toreGast) AS tore_erzielt,
SUM(toreHeim) AS tore_bekommen
FROM spieltag
GROUP BY gastmannschaftID ) gast
ON m.id = gast.gastmannschaftID
LEFT JOIN (
SELECT id, SUM(punkte) AS punkte
FROM (
SELECT heimmannschaftID AS id,
CASE
WHEN toreHeim > toreGast THEN 3
WHEN toreHeim = toreGast THEN 1
ELSE 0
END punkte
FROM spieltag
UNION ALL
SELECT gastmannschaftID AS id,
CASE
WHEN toreHeim < toreGast THEN 3
WHEN toreHeim = toreGast THEN 1
ELSE 0
END punkte
FROM spieltag
) punkte
GROUP BY id
) punkte
ON punkte.id = m.id
ORDER BY punkte DESC;
+----------+--------------+---------------+--------+
| name | tore_erzielt | tore_bekommen | punkte |
+----------+--------------+---------------+--------+
| HSV | 5 | 4 | 4 |
| Hannover | 2 | 2 | 1 |
| Berlin | 2 | 3 | 0 |
+----------+--------------+---------------+--------+
3 rows in set (0.00 sec)
So oder ähnlich was sollte das Ergebnis aussehen.
Grüße
Thomas
|

13.09.2010, 13:03:34
|
Anfänger
|
|
Registriert seit: Sep 2010
Alter: 36
Beiträge: 4
|
|
AW: Habe ein problem mit MySQL
Zitat:
Zitat von thomas_w
Dazu mal eine alternative Idee. Ich habe mal versucht, alle Daten komplett mit einem SQL zu ermitteln und auszugeben.
Testdaten:
Code:
CREATE TABLE mannschaft (
id INT NOT NULL,
name VARCHAR(50) NOT NULL,
kurzel VARCHAR(10) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO mannschaft VALUES
( 1, 'HSV','HSV'),
( 2, 'Berlin','B'),
( 3, 'Hannover','H');
CREATE TABLE spieltag (
id INT NOT NULL,
spieltagID INT NOT NULL,
heimmannschaftID INT NOT NULL,
gastmannschaftID INT NOT NULL,
spielbeginn TIME,
toreHeim INT NOT NULL,
toreGast INT NOT NULL,
spielStatus INT,
PRIMARY KEY (id),
CONSTRAINT fk_spieltag_01
FOREIGN KEY (heimmannschaftID)
REFERENCES mannschaft (id),
CONSTRAINT fk_spieltag_02
FOREIGN KEY (gastmannschaftID)
REFERENCES mannschaft (id)
);
INSERT INTO spieltag VALUES
(1 , 1, 1, 2, NULL, 3, 2, 0),
(2 , 2, 1, 3, NULL, 2, 2, 0);
Dazu folgenden SQL, er ist ein bißchen größer geworden. Meiner Meinung müßte das Tabellenmodell weiter normalisiert werden.
Code:
SELECT name,
COALESCE(heim.tore_erzielt,0) + COALESCE(gast.tore_erzielt,0) AS tore_erzielt,
COALESCE(heim.tore_bekommen,0) + COALESCE(gast.tore_bekommen,0) AS tore_bekommen,
punkte.punkte
FROM mannschaft m
LEFT JOIN ( SELECT heimmannschaftID,
SUM(toreHeim) AS tore_erzielt,
SUM(toreGast) AS tore_bekommen
FROM spieltag
GROUP BY heimmannschaftID ) heim
ON m.id = heim.heimmannschaftID
LEFT JOIN ( SELECT gastmannschaftID,
SUM(toreGast) AS tore_erzielt,
SUM(toreHeim) AS tore_bekommen
FROM spieltag
GROUP BY gastmannschaftID ) gast
ON m.id = gast.gastmannschaftID
LEFT JOIN (
SELECT id, SUM(punkte) AS punkte
FROM (
SELECT heimmannschaftID AS id,
CASE
WHEN toreHeim > toreGast THEN 3
WHEN toreHeim = toreGast THEN 1
ELSE 0
END punkte
FROM spieltag
UNION ALL
SELECT gastmannschaftID AS id,
CASE
WHEN toreHeim < toreGast THEN 3
WHEN toreHeim = toreGast THEN 1
ELSE 0
END punkte
FROM spieltag
) punkte
GROUP BY id
) punkte
ON punkte.id = m.id
ORDER BY punkte DESC;
+----------+--------------+---------------+--------+
| name | tore_erzielt | tore_bekommen | punkte |
+----------+--------------+---------------+--------+
| HSV | 5 | 4 | 4 |
| Hannover | 2 | 2 | 1 |
| Berlin | 2 | 3 | 0 |
+----------+--------------+---------------+--------+
3 rows in set (0.00 sec)
So oder ähnlich was sollte das Ergebnis aussehen.
Grüße
Thomas
|
Jo vielen dank. Das geht alles. :D woa ich bin so happy, vielen Dank noch mal. noch mal ne andere frage kann du mir vielleicht ne internet seite mit gutten toturials oder ein buch vorschlagen wo ich mir sowas oder überhaupt meinen php code verbessern kann?
Noch mals Danke für die hilfe
|

13.09.2010, 13:57:03
|
Junior Member
|
|
Registriert seit: Aug 2010
Alter: 15
Beiträge: 395
|
|
AW: Habe ein problem mit MySQL
Zitat:
Zitat von Lordwurst
Jo vielen dank. Das geht alles. :D woa ich bin so happy, vielen Dank noch mal. noch mal ne andere frage kann du mir vielleicht ne internet seite mit gutten toturials oder ein buch vorschlagen wo ich mir sowas oder überhaupt meinen php code verbessern kann?
Noch mals Danke für die hilfe
|
Also eine Seite mit PHP-Tipps hast Du ja schon gefunden. Siehe SELFPHP ... (Menü links)
Ansonsten habe ich PHP gelernt, indem ich mir ein schönes Projekt auf SourceForge gesucht habe und dort eine Weile mitgemacht habe. Ein kleines modernes Projekt - zum Lernen wie man's macht -wäre beispielsweise: http://rsslounge.aditu.de/
Aber von alleine klappt das mit dem PHP-Lernen nicht, da muss man schon richtig Zeit reinstecken, wenn man professionelle Ergebnisse möchte.
Viel Erfolg!
Grüße
Thomas
__________________
Die SQL-Backstube
Bietet Rezepte, Lösungen und ausführliche Beispiele rund um gesundes SQL und zufriedene Datenbanken.
Geändert von thomas_w (13.09.2010 um 14:08:23 Uhr)
Grund: Schreibfehler
|

13.09.2010, 15:47:33
|
SELFPHP Profi
|
|
Registriert seit: Apr 2008
Alter: 49
Beiträge: 1.938
|
|
AW: Habe ein problem mit MySQL
Zitat:
Zitat von Lordwurst
internet seite mit gutten toturials
|
schau mal hier unter punkt d.
cx
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Themen-Optionen |
|
Ansicht |
Linear-Darstellung
|
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.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 14:45:21 Uhr.
|