Kreuztabelle mit Sortierung

  • Hallo Community,



    habe schon etliche Foren durchsucht und keine verständliche Antwort gefunden.



    Ich habe 2 Tabellen: tbl_spieler und tbl_ergebnisse



    tbl_spieler
    ID | Name | Vorname



    tbl_ergebnisse
    ID | ErgebnisNr | Ergebnis





    Ich möchte jetzt folgende Darstellung:



    [Blockierte Grafik: http://www.schmidt92.de/ziel.jpg]



    Außerdem soll Ergebnis1 immer das höchste Ergebnis des Spielers sein, Ergebnis2 das Zweithöchste etc.



    Die Spieler sollen so sortiert sein, dass der Spieler, mit dem höchsten Ergebnis ganz oben steht, bei Gleichstand zählt das 2. bzw. 3.





    Bitte um Hilfe, bin komplett neu verzeifelt..



    Vielen vielen Dank für die Antworten.
    Mit freundlichen Grüßen
    D. Schmidt

  • ganz klar, du brauchst ne merge-tabelle


    du hast n spieler, die m ergebnisse haben können
    n:m => mergetabelle^^


    also sowas wie spieler-ergebnisse
    spieler_id|ergebnis_id


    und dann kannste mit left-joins oder nständigen wherebedingungen dein statement bauen


    mit where sähe es ggf so aus


    Code
    1. select s.name, s.vorname, e.ergebnis_nr, e.ergebnis from spieler s, ergebnis e, merge m where m.spieler_id = s.id and m.ergebnis_id = e.id


    is jetzt ungetestet und mit nem left-join wäre es wohl eleganter..^^


    sollteste doppelte ergebnisse bekommen mach nen select distinct


    und rechtschreibfehler darfste behalten is spät und ich geh ins bett also nachti und viel erfolg

  • Hey,


    erstmal Danke für die schnelle Antwort. Kam gestern gar nicht mehr dazu, sie zu lesen.


    Habe es jetzt mal ausprobiert, klappt leider noch nicht.
    Habe ausgeschrieben nun folgendes in der Frage:


    Code
    1. select tbl_spieler.Name, tbl_spieler.Vorname, tbl_ergebnisse.ErgNr, tbl_ergebnisse.Ergebnis
    2. from
    3. tbl_spieler, tbl_ergebnisse, merge m
    4. where
    5. m.spieler_id = tbl_spieler.id and
    6. m.ergebnis_id = tbl_ergebnisse.id


    Ist da ein Fehler in meinen Bezeichnungen drin?
    Bzw. wie würde denn die Alternative aussehen, die du vorgeschlagen hast..?


    Weiterhin habe ich noch das Problem mit der Sortierung, selbst wenn das jetzt funktionieren würde :P


    Liebe Grüße
    Dominik

  • nachfolgende struktur und das drauf folgende sql sind so geprüft. natürlich ist mit einer solchen struktur nicht dein gewünschtes ergebnis möglich, aber eventuell verdeutlicht es dir die herangehensweise.


    wenn du die struktur so habe willst, wie beschrieben, musste deine daten wohl in einen table stopfen, aber das ist dann eher tabellenkalkulation, als sql ;)


    Code
    1. select s.id, s.name, s.vorname, e.ergebnisnr, e.ergebnis from spieler s, ergebnisse e, spieler_to_ergebnis m
    2. where s.id = m.spieler_id and e.id = m.ergebnis_id order by e.ergebnis asc
  • Hallo :)


    Sieht schon mal gut aus, habe es getestet und funktioniert auch so.


    In meinem Entwurf hatte ich nur 2 Tabellen vorgesehen, mit 3 wie bei dir ist es aber komfortabler habe ich festgestellt ;)


    Es passt aber immer noch nicht ganz auf mein Problem, nämlich, dass die Daten nicht untereinander stehen sollen,
    sondern "über Eck" Kenne das von Business Objects unter Slice&Dice.


    Hier nochmal das Schema anhand eines Beispiels:




    Ist das überhaupt mit mysql möglich oder muss ich die Daten nach der Abfrage noch anders verarbeiten und wenn ja, wie?
    (Meine Seite auf der dies laufen soll ist in php - kenne mich da aber auch nicht viel besser aus :D)



    Vielen Dank & Viele Grüße
    Dominik

  • ich glaube nicht, dass man das so in sql hinbekommt, es sei denn man schreibt es direkt in dem format in einen table..
    ich denke schon dass du das nochmal bearbeiten musst, hab bisher nie eine solche darstellungsform mit sql realisiert ;)


    und wenn du gar keine ahnung von php hast, mach nen job im jobforum auf und biete ne gegenleistung.. ohne basiswissen kannste das unterfangen knicken.
    aber eventuell findet sich ja jemand mit mehr zeit oder mehr expertise, der dir das baut