Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQL: Wieviele Teile gehören zum Ganzen? (https://www.delphipraxis.net/169791-sql-wieviele-teile-gehoeren-zum-ganzen.html)

Angel4585 12. Aug 2012 12:04

Datenbank: MySQL • Version: 5 • Zugriff über: PHP

SQL: Wieviele Teile gehören zum Ganzen?
 
Hallo :)
Ich habe ein kleines Problem in SQL.

Ich habe insgesamt drei Tabellen:
League(level,index,name)
Team(id,townid,name)
LeagueTeam(level,index,townid,teamid)

Jetzt brauche ich eine SQL-Abfrage die mir folgendes Ergebnis ausspuckt:
TeamsInLeague(level,index,town,teamcount)

Also wieviele Teams wurden der Liga zugeordnet.


Habs mitfolgender Anfrage versucht:
Code:
SELECT l.level, l.index, lt.townid, count( * ) teamcount
FROM League l
LEFT JOIN LeagueTeam lt ON lt.level = l.level
AND lt.index = l.index
GROUP BY l.level, l.index
Passt solange mehr als 0 Teams in der Liga sind.
Aber wenn 0 Teams in der Liga sind, bekomme ich für teamcount trotzdem 1.
irgendwie muss ich anders arbeiten mit dem count(*) aber ich komm nicht drauf wie:(
Habt Ihr ne Idee?

PS: Mit Sub-Select wäre es mir prinzipiell klar wie es geht,einfach ein zweites select in das count reinmachen, aber ich möchte es lieber mit join lösen, wenn möglich.

Uwe Raabe 12. Aug 2012 12:10

AW: SQL: Wieviele Teile gehören zum Ganzen?
 
Muss das nicht ein INNER JOIN sein?

Angel4585 12. Aug 2012 12:15

AW: SQL: Wieviele Teile gehören zum Ganzen?
 
beim inner join bekomm ich keine Einträge für die Ligen mit 0 Teams, die brauch ich allerdings eher als die Ligen die "voll" sind

DeddyH 12. Aug 2012 12:16

AW: SQL: Wieviele Teile gehören zum Ganzen?
 
Ich verstehe die ganze Struktur nicht. Das sieht aus wie eine m:n-Beziehung, aber dazu müsste ein Team ja theoretisch in mehreren Ligen gleichzeitig spielen können. Vielleicht erläuterst Du das Ganze noch einmal kurz etwas ausführlicher.

Angel4585 12. Aug 2012 12:22

AW: SQL: Wieviele Teile gehören zum Ganzen?
 
Naja zu einem Zeitpunkt ist ein Team immer nur in einer Liga, aber irgendwann steigt es mal auf oder ab und wechselt die Liga.

DeddyH 12. Aug 2012 12:27

AW: SQL: Wieviele Teile gehören zum Ganzen?
 
Das ist mir schon klar, aber dann braucht man noch ein Datumsfeld (oder eine Saison-Kennzeichnung), oder willst Du alle Team-Liga-Zuordnungen, die jemals existiert haben?

Angel4585 12. Aug 2012 12:52

AW: SQL: Wieviele Teile gehören zum Ganzen?
 
hmm.. stimmt eigentlich, ne saison wäre nicht verkehrt.. und die auswertung brauche ich dann natürlich für die aktuellste saison
Saison wäre dann eine Extra-Tabelle deren ID mit bei LeagueTeam dabei wäre.

DeddyH 12. Aug 2012 12:54

AW: SQL: Wieviele Teile gehören zum Ganzen?
 
Japp, das müsste stimmen (welches Team in welcher Saison in welcher Liga). Zusätzlich würde ich dann über diese 3 Felder noch einen UNIQUE-Index legen.

[edit] Quatsch, der Index müsste auf der Team-Saison-Kombination liegen, ohne Liga. [/edit]

Angel4585 12. Aug 2012 13:00

AW: SQL: Wieviele Teile gehören zum Ganzen?
 
Ja macht sinn da ienen unique index reinzumachen.
Ich probier mal bissl mit der neuen Tabelle rum,ob ich dadurch evtl auf ne gescheite Lösung für die Abfrage komme. :thumb:

sx2008 12. Aug 2012 17:18

AW: SQL: Wieviele Teile gehören zum Ganzen?
 
Zitat:

Zitat von Angel4585 (Beitrag 1177908)
Naja zu einem Zeitpunkt ist ein Team immer nur in einer Liga, aber irgendwann steigt es mal auf oder ab und wechselt die Liga.

Dann wäre es wohl sehr sinnvoll den Key der Liga in der Tabelle "Team" zu speichern.
Und die Tabelle "LeagueTeam" wird gelöscht und statt dessen die Tabelle "TeamHistory" erstellt.
Code:
table TeamHistory
=======================================================
IdTeamHistory  | IdTeam | IdLeague | DateFrom | DateTo


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz