php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 27.07.2011, 18:28  
Erfahrener Benutzer
 
Benutzerbild von Delirius
 
Registriert seit: 07.07.2009
Beiträge: 215
PHP-Kenntnisse:
Anfänger
Delirius wird schon bald berühmt werden
Standard [Erledigt] Abfrage Sportergebnisse / Sporttabelle

Hallo zusammen,

ich wollte mir (aus reinen Übungszwecken) eine Sporttabelle schreiben, in der die Ergebnisse der Fussball-Bundesliga eingetragen werden können.

Das ganze Ding wollte ich selbst auf die Beine stellen und hab´ dazu 3 Tabellen in MySQL geschrieben:

Code:
desc tmp_mannschaften;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| id     | int(2)      | NO   |     |         |       |
| verein | varchar(50) | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+

desc tmp_spieltag;
+----------+---------+------+-----+---------+-------+
| Field    | Type    | Null | Key | Default | Extra |
+----------+---------+------+-----+---------+-------+
| id       | int(11) | NO   |     |         |       |
| spieltag | int(2)  | YES  |     | NULL    |       |
| datum    | date    | YES  |     | NULL    |       |
+----------+---------+------+-----+---------+-------+

desc tmp_ergebnisse;
+-----------+---------+------+-----+---------+----------------+
| Field     | Type    | Null | Key | Default | Extra          |
+-----------+---------+------+-----+---------+----------------+
| id        | int(11) | NO   | PRI | NULL    | auto_increment |
| spieltag  | int(2)  | YES  |     | NULL    |                |
| heim      | int(2)  | YES  |     | NULL    |                |
| heim_tore | int(2)  | YES  |     | NULL    |                |
| gast      | int(2)  | YES  |     | NULL    |                |
| gast_tore | int(2)  | YES  |     | NULL    |                |
+-----------+---------+------+-----+---------+----------------+
Nun wollte ich so einfach wie möglich den query aufbauen und damit lediglich den Spieltag, das Datum, die Begegnung und das jeweilige Ergebnis abfragen.

Mit folgendem query funktioniert das auch:

Code:
SELECT
          tag.spieltag,
          tag.datum,
          concat(heim.verein,' : ',auswaerts.verein) as Begegnung,
          concat(erg.heim_tore,' : ',erg.gast_tore) as Ergebnis
FROM
          tmp_ergebnisse as erg
LEFT JOIN
          tmp_spieltag as tag on tag.spieltag=erg.spieltag
LEFT JOIN
          tmp_mannschaften as auswaerts on auswaerts.id=erg.gast
LEFT JOIN
          tmp_mannschaften as heim on heim.id=erg.heim
Ergebnis ist dann:

Code:
+----------+------------+-----------------------------------------+----------+
| spieltag | datum      | Begegnung                               | Ergebnis |
+----------+------------+-----------------------------------------+----------+
|        1 | 2011-08-05 | Bayern München : Borussia Dortmund      | 3 : 2    |
|        1 | 2011-08-05 | SV Werder Bremen : 1.FC Kaiserslautern  | 0 : 2    |
|        2 | 2011-08-12 | Bayern München : SV Werder Bremen       | 2 : 1    |
|        2 | 2011-08-12 | Borussia Dortmund : 1.FC Kaiserslautern | 0 : 1    |
|        3 | 2011-08-19 | Bayern München : 1.FC Kaiserslautern    | 0 : 3    |
|        3 | 2011-08-19 | Borussia Dortmund : SV Werder Bremen    | 2 : 2    |
+----------+------------+-----------------------------------------+----------+
Dazu hätte ich nun 2 Fragen.

1) Ist der Aufbau der Tabellen so ok oder sollte man dies anders lösen?
2) Wenn die Tabellen so in Ordnung sind, kann man den query sicher verbessern (ohne das zweite left join). Was schlagt ihr vor?
__________________
LG Delirius

Ein Ring Sie zu knechten...
Delirius ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 27.07.2011, 22:30  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Find ich eigentlich schon ganz gut deinen Ansatz. Eigenschaft "spieltag" ist allerdings redundant in der Ergebnistabelle.. dort lieber einen richtigen Fremdschlüssel auf tmp_spieltag führen. Spieltage widerholen sich pro Saison.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 27.07.2011, 23:03  
Erfahrener Benutzer
 
Benutzerbild von Delirius
 
Registriert seit: 07.07.2009
Beiträge: 215
PHP-Kenntnisse:
Anfänger
Delirius wird schon bald berühmt werden
Standard Abfrage Sportergebnisse / Sporttabelle

Stimmt...hab´ ich so gar nicht drauf geachtet. Dann würde ich einfach die Spalte spieltag in spieltag_id umwandeln und die id aus tmp_spieltag als foreign key verwenden.

Code:
desc tmp_ergebnisse;
+--------------+---------+------+-----+---------+----------------+
| Field        | Type    | Null | Key | Default | Extra          |
+--------------+---------+------+-----+---------+----------------+
| id           | int(11) | NO   | PRI | NULL    | auto_increment |
| spieltag_id  | int(2)  | NO   |     | NULL    |                |
| heim         | int(2)  | YES  |     | NULL    |                |
| heim_tore    | int(2)  | YES  |     | NULL    |                |
| gast         | int(2)  | YES  |     | NULL    |                |
| gast_tore    | int(2)  | YES  |     | NULL    |                |
+--------------+---------+------+-----+---------+----------------+
Der query selbst ist nicht zu optimieren? Ich find´ den zweiten left join auf die gleiche Tabelle irgendwie merkwürdig, auch wenn es funktioniert?!
__________________
LG Delirius

Ein Ring Sie zu knechten...
Delirius ist offline   Mit Zitat antworten
Alt 28.07.2011, 01:34  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Musst du machen, es sind ja zwei unterschiedliche Mannschaften, die dort aufeinandertreffen.
spieltag_id, gast und heim noch auf die gleiche Schlüssellänge des referenzierten PK setzen (11). Bei Schlüssel, Fremd- wie Primär-, geh nicht zu geizig mit der Größe um. int(11) ist ausreichend, int(2) ist zu klein. Achte wie gesagt auf die gleichen Schlüssellängen für FK und PK, und das du Indizes gesetzt hast.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Alt 28.07.2011, 08:22  
Erfahrener Benutzer
 
Benutzerbild von Delirius
 
Registriert seit: 07.07.2009
Beiträge: 215
PHP-Kenntnisse:
Anfänger
Delirius wird schon bald berühmt werden
Standard Abfrage Sportergebnisse / Sporttabelle

Zitat:
Zitat von lstegelitz
Achte wie gesagt auf die gleichen Schlüssellängen für FK und PK, und das du Indizes gesetzt hast.
Werd´ ich machen und danke für die Antworten / Tipps.
__________________
LG Delirius

Ein Ring Sie zu knechten...
Delirius ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Abfrage von einer Abfrage Datenbanken 5 27.01.2011 23:31
Problem mit Abfrage - join, inner join, distinct? Gachet01 Datenbanken 2 27.01.2011 06:49
False Abfrage und SQL hängt sich auf marc77 Datenbanken 4 22.11.2010 14:57
Optimierung einer Abfrage eines Datensatzes samt Vorgänger und Nachfolger Sirke Datenbanken 7 28.04.2010 17:11
result Variablen von SQL verbinden vci PHP Tipps 2010 15 05.02.2010 19:09
Scriptsuche [Erledigt] SQL- Abfrage über 2 tabellen ejim Scriptbörse 1 17.07.2009 21:10
SQL Abfrage ohne DESC langsam Thisi Datenbanken 5 07.01.2009 09:53
Wiemache ich eine Abfrage über 3 Tabellen??? djscaleo Datenbanken 8 05.01.2009 10:46
MySQL - Fehler in einfacher Abfrage oden Datenbanken 11 03.01.2009 20:03
[Erledigt] mysql abfrage über 4 Tabelle - bis 3 geht, bei der 4. habert Datenbanken 2 08.09.2005 11:59
[Erledigt] IF() abfrage in variable packen PHP Tipps 2005 14 01.04.2005 17:23
Abfrage von Char-Feldern Datenbanken 9 04.02.2005 14:06
[Erledigt] Mysql Abfrage Problem! PHP-Fortgeschrittene 5 27.11.2004 10:22
Abfrage funktioniert zwar, aber nicht korrekt Datenbanken 2 16.08.2004 09:10
Abfrage aus DB noch mal ausgeben und Abfrage aus mehrern Tab PHP Tipps 2004 4 12.07.2004 15:00

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
sporttabelle, sportergebnisse datenbank, sql datenbank sport ergebnisse, php fifa ergebnisse abgfragen, sql abfrage fussball tabelle, sql php fussball tabelle, abfrage der fussball.de datenbank, php sportergebnisse, sportergebnisse php, fußball ergebnisse datenbank für website abfragen, datenbank sportergebnisse, datenbanken für sporterbenisse, fußball tabellen abfragen, php fussball tabelle sql abfrage

Alle Zeitangaben in WEZ +2. Es ist jetzt 13:19 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum