Announcement

Collapse
No announcement yet.

Statistikdaten und weitere Daten aus 5 Tabellen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Statistikdaten und weitere Daten aus 5 Tabellen

    Hallo,

    ich stehe hier vor einem riesen Problem, dass ich alleine nicht gelöst bekomme und nun Hilfe und Anregungen von Profis suche.
    Ich bin gerade dabei, in PHP eine Rankingliste für Statistiken zu erstellen und habe sie für Turniere, Ligen und Ladder in jeweils einer Tabelle gespeichert.

    Screenshot: http://www.templatebar.de/share/2012-07-13_1329.png

    Die Auswertung jeweils einer Tabelle ist soweit kein Problem wie man oben im Screen sehen kann. Nur die Auswertung aus allen 3 Tabellen (Turniere und Ligen und Ladder) zusammen, also inkl. Such- und Sortierfunktion bekomme ich so nicht hin. Die Ausgabe ist dann nicht anderes als wie auf dem Screenshot zu sehen ist. Halt nur aus allen 3 Tabellen und nicht nur aus einer.

    Hier mal die Tabellenstrukturen aller Tabellen, die involviert sind:

    Turnier Stats:
    [highlight=sql]
    CREATE TABLE `turnier_stats` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `user_id` int(10) NOT NULL,
    `team` int(10) NOT NULL,
    `turnier` int(10) NOT NULL,
    `group` int(10) NOT NULL,
    `spiele` int(10) NOT NULL,
    `tore` int(10) NOT NULL,
    `gtore` int(10) NOT NULL,
    `punkte` int(10) NOT NULL,
    `siege` int(10) NOT NULL,
    `unentschieden` int(10) NOT NULL,
    `niederlagen` int(10) NOT NULL,
    `differenz` int(10) NOT NULL,
    PRIMARY KEY (`id`)
    )
    [/highlight]

    Ligen Stats:
    [highlight=sql]
    CREATE TABLE `ligen_stats` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `user_id` int(10) NOT NULL,
    `team` int(10) NOT NULL,
    `liga` int(10) NOT NULL,
    `group` int(10) NOT NULL,
    `spiele` int(10) NOT NULL,
    `tore` int(10) NOT NULL,
    `gtore` int(10) NOT NULL,
    `punkte` int(10) NOT NULL,
    `siege` int(10) NOT NULL,
    `unentschieden` int(10) NOT NULL,
    `niederlagen` int(10) NOT NULL,
    `differenz` int(10) NOT NULL,
    PRIMARY KEY (`id`)
    )
    [/highlight]

    Ladder Stats:
    [highlight=sql]
    CREATE TABLE `ladder_stats` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `user_id` int(10) NOT NULL,
    `team` int(10) NOT NULL,
    `ladder` int(10) NOT NULL,
    `group` int(10) NOT NULL,
    `spiele` int(10) NOT NULL,
    `tore` int(10) NOT NULL,
    `gtore` int(10) NOT NULL,
    `punkte` int(10) NOT NULL,
    `siege` int(10) NOT NULL,
    `unentschieden` int(10) NOT NULL,
    `niederlagen` int(10) NOT NULL,
    `differenz` int(10) NOT NULL,
    PRIMARY KEY (`id`)
    )
    [/highlight]

    Teams für die Suche nach dem Teamname. Die Team ID wird in der Statistiktabelle im Feld `team` eingetragen
    [highlight=sql]
    CREATE TABLE `teams` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `user_id` int(10) NOT NULL,
    `name` varchar(255) NOT NULL,
    PRIMARY KEY (`id`)
    )
    [/highlight]

    User für die Suche nach dem Username. Die User ID wird in der Statistiktabelle im Feld `user_id` eingetragen
    [highlight=sql]
    CREATE TABLE `users` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `nick` varchar(255) NOT NULL,
    PRIMARY KEY (`id`)
    )
    [/highlight]

    Es soll also möglich sein, nach Teamnamen oder Usernamen suchen zu können, sowie die Sortierung anhand folgender Werte:

    Spielmodus (steht in der Tabelle z.Bsp. `turnier` im Feld `stats`)
    Plattform (steht in der Tabelle z.Bsp. `turnier` im Feld `portal`)
    Zeitraum (steht in der Tabelle z.Bsp. `turnier` im Feld `datum` (Timestamp))

    Hier mal was ich bis jetzt gemacht habe:
    [highlight=sql]
    SELECT s1.`id`, s2.`team`, (s2.`tpoints` + s3.`lpoints` + s4.`lapoints`) AS `allpoints`, (s2.`tgames` + s3.`lgames` + s4.`lagames`) AS `allgames`
    FROM `users` AS s1
    LEFT JOIN (
    SELECT `stats`, `portal`, `datum` FROM `turniere` (Wenn Sortierung aktiv, dann setzte ich per PHP folgende Werte ein: WHERE s2.`stats` = '1' AND `portal` = 'pc' AND s2.`datum` >= '".$season_start."' AND s2.`datum` <= '".$season_stop."')
    ) AS s2 ON s1.`id` = s2.`user_id`
    LEFT JOIN (
    SELECT `user_id`, `team`, SUM(`punkte`) AS `tpoints`, SUM(`spiele`) AS `tgames` FROM `turnier_stats` GROUP BY `user_id`, `team`
    ) AS s2 ON s1.`id` = s2.`user_id`
    LEFT JOIN (
    SELECT `user_id`, `team`, SUM(`punkte`) AS `lpoints`, SUM(`spiele`) AS `lgames` FROM `ligen_stats` GROUP BY `user_id`, `team`
    ) AS s3 ON s1.`id` = s3.`user_id`
    LEFT JOIN (
    SELECT `user_id`, `team`, SUM(`points`) AS `lapoints`, SUM(`spiele`) AS `lagames` FROM `ladder_stats` GROUP BY `user_id`, `team`
    ) AS s4 ON s1.`id` = s4.`user_id`
    GROUP BY s1.`id`, s2.`team`
    ORDER BY `allpoints` DESC, `allgames`, s1.`id`
    [/highlight]

    Meine Abfrage nur für nur Turniere oder Ligen oder Ladden habe ich bereits fertig und funktioniert mit folgendem Code:
    Beispiel Turnierstatistik

    [highlight=sql]
    SELECT sum(s1.`punkte`) AS points, s1.`turnier`, s1.`user_id`, s1.`team`, s2.`stats`, s2.`datum`, s3.`nick`, s4.`name`, s4.`id` AS `team_id`
    FROM ".$sql_prefix."turnier_stats AS s1 LEFT JOIN ".$sql_prefix."turniere AS s2 ON s1.`turnier` = s2.`id`
    LEFT JOIN ".$db['users']." AS s3 ON s1.`user_id` = s3.`id`
    LEFT JOIN ".$sql_prefix."teams AS s4 ON s1.`team` = s4.`id`
    ".$rwhere.$r2where." ".$group_by."
    ORDER BY `points` DESC, s1.`spiele`, s1.`user_id`
    LIMIT ".($page - 1)*$mranking.",".$mranking."
    [/highlight]

    Mit den Variablen $rwhere setzte ich, sofern im Formular ausgewählt wird folgendes ein:

    [highlight=sql]
    WHERE s2.`stats` = '".$_SESSION['modus']."' AND s2.`portal` = '".$_SESSION['plattform']."' AND s2.`datum` >= '".$season_start."' AND s2.`datum` <= '".$season_stop."'
    [/highlight]

    Mit der Variable $r2where setzte ich, sofern jemand nach einem Namen sucht folgendes ein:

    [highlight=sql]
    AND (s3.`nick` LIKE '%".$_SESSION['searchuser']."%' OR s4.`name` LIKE '%".$_SESSION['searchuser']."%')
    [/highlight]

    Und die $group_by Variable dann jeweils mit

    [highlight=sql]
    GROUP BY GROUP BY s1.team
    [/highlight]

    sofern nur Team Stats angezeigt werden sollen und

    [highlight=sql]
    GROUP BY GROUP BY s1.user_id
    [/highlight]

    wenn nur User Stats angezeigt werden sollen.

    Wie gesagt, dass alles funktioniert breits jeweils für meine Turnier, Ligen und Ladder Statistiken. Jetzt möchte ich aber eine Liste, wo alles zusammen ist.
    Ich hoffe, dass sich mir jemand hier erbarmt und mir helfen kann.

    Vielen Dank im Voraus.
    Zuletzt editiert von richcom; 19.07.2012, 09:53.

  • #2
    Hallo,
    Bitte bring etwas "Ordnung" in deinen Beispielcode: Formatierung von SQL in Beiträgen
    Einrückungen erhöhen die Lesbarkeit auch ungemein.

    Gruß Falk
    Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

    Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

    Comment


    • #3
      ..wo alles zusammen ist..

      und vielleicht formulierst Du das mal aus, dann kann Dir vielleicht jemand helfen.
      Gruß, defo

      Comment


      • #4
        Originally posted by defo View Post
        ..wo alles zusammen ist..

        und vielleicht formulierst Du das mal aus, dann kann Dir vielleicht jemand helfen.
        Was genau meinst du bitte?
        Sorry aber das ist das erste mal, dass ich Hilfe dieser Art suche. Auch kenne ich nicht die geflogenheiten in diesem Forum. Ich bitte deshalb um Nachsicht.

        Comment


        • #5
          Originally posted by richcom View Post
          Was genau meinst du bitte?
          Du hast ja den Status Quo schon ganz gut beschrieben. Aber Dein Ziel ist dagegen sehr nebulös.

          Was soll denn 'alles zusammen' sein? Daten können 'alle zusammen' bspw. nebeneinander oder untereinander stehen, um mal 2 ganz grundlegende 'alles zusammen' zu nennen.
          Vor 2 Tagen gab es erst wieder einen DB Thread, wo das Ganze in Ping Pong Manier auseinandergedröselt wurde...
          Die Erfahrung ist, dass Spekulation über das gewünschte Ergebnis oft falsch ist. Das hilft niemand und kostet Zeit.

          Also schreib Deine Ausgangsdaten hin und die Ergebnisdaten als Beispiel. Ein paar Erläuterungen, Randbedingungen, Datenmengen.. können auch nicht schaden.
          Gruß, defo

          Comment


          • #6
            ok, Danke für den Hinweis. Ich habe mal mein ersten Thread überarbeitet und hoffe, dass es nun verständlich genug ist.

            Comment


            • #7
              Originally posted by richcom View Post
              ok, Danke für den Hinweis. Ich habe mal mein ersten Thread überarbeitet und hoffe, dass es nun verständlich genug ist.
              Leider nicht, nochmal, es geht nicht darum, was ich darunter verstehe (oder könnte). Es geht darum, was Du haben willst!
              Wieso schreibst Du nicht einfach ein paar Beispieldaten dazu, so wie sie am Ende angezeigt werden sollen?
              Gruß, defo

              Comment


              • #8
                Das steht doch im meinem Thread!! Hast du den überhaupt gelesen?
                Originally posted by richcom View Post
                Ich bin gerade dabei, in PHP eine Rankingliste für Statistiken zu erstellen und habe sie für Turniere, Ligen und Ladder in jeweils einer Tabelle gespeichert.
                Originally posted by richcom View Post
                Die Auswertung jeweils einer Tabelle ist soweit kein Problem wie man oben im Screen sehen kann. Nur die Auswertung aus allen 3 Bereichen zusammen, also inkl. Such- und Sortierfunktion bekomme ich so nicht hin.
                Ergo die Statistiken für jeweils Turniere oder Ligen oder Ladder geht bereits.
                Nur die Auswertung (siehe Screenshot) für alle 3 Bereiche zusammen (Turniere und Liegen und Ladder) nicht.

                Ich hoffe, dass das nun mit den Textmarkierungen besser verständlich ist und direkt ohne Nachdenken ins Auge fällt.

                Comment


                • #9
                  Hallo richcom,

                  Originally posted by richcom View Post
                  Das steht doch im meinem Thread!! Hast du den überhaupt gelesen?
                  Wenn hier einer der fleissigen Helfer nachfragt, dann kannst du davon ausgehen, DASS er deinen Thread GELESEN, aber ein Verständnissproblem damit hat! Allerdings habe ich den Eindruck, du liest die Nachfragen und Hinweise nicht (oder sie interessieren dich nicht). Dir mag völlig klar sein was am Ende rauskommen soll und was bereits geht und was dir noch fehlt. Aber die Leute hier haben davon keine Ahnung und sind auf deine Problembeschreibungen angewiesen. Und nur zur Erinnerung: DU suchst Hilfe!

                  Originally posted by richcom View Post
                  Ergo die Statistiken für jeweils Turniere oder Ligen oder Ladder geht bereits.
                  Das ist schön für dich. Aber für die Helfer hier ist es sehr zeitaufreibend und verwirrend, wenn du (sehr umfangreich) Dinge postest die FUNKTIONIEREN und mit denen du KEIN Problem hast!

                  Originally posted by richcom View Post
                  Nur die Auswertung (siehe Screenshot) für alle 3 Bereiche zusammen (Turniere und Liegen und Ladder) nicht.
                  Du bist nun mehrfach darauf hingewiesen worden, aber du hast es bisher versäumt anhand von Beispielen zu erläutern was du damit meinst!
                  Originally posted by richcom View Post
                  Ich hoffe, dass das nun mit den Textmarkierungen besser verständlich ist und direkt ohne Nachdenken ins Auge fällt.
                  Sorry, du kannst es noch so fett markieren und noch sooft wiederholen, ich weiss einfach rein praktisch nicht was "alle 3 Bereiche zusammen" sein soll.

                  Also bitte noch(und zum letzten)mal, mach Beispieldaten für deine Tabellen und das gewünschte Ergebnis für genau diese Beispieldaten. Auf das was schon geht kannst du dabei gerne verzichten.

                  Gruß Falk
                  Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                  Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                  Comment


                  • #10
                    Hallo,

                    ich habe gerade mal einen Laien mein Thread durchlesen lassen und selbst er hat verstanden, was ich will. Ich kann nicht ganz nachvollziehen, was daran so schwer sein soll. Hielfreich währe auch, wenn ihr schreiben würdet, was ihr nicht versteht. Deshalb nochmal in der Hoffnung eure mir nicht bekannten Wissenlücken zu schließen:

                    Ich habe 3 Tabellen. Eine für Turnierstatistiken, eine für Ligenstatistiken und eine für Ladderstatistiken.
                    Die darin befindlichen Felder unterscheiden sich lediglich bei der Turnier- oder Liga- oder Ladder-ID. Ansonsten sind die Felder identisch (siehe ersten 3 SQL Statments).

                    In allen 3 Tabellen möchte ich nun die Punkte (Feldname: `punkte`) zusammenzählen. Die Ausgabe ist dann identisch mit dem Screenshot. Lediglich die Punkte sind dann halt nicht nur aus einer Tabelle (Beispiel Turniere) sondern aus allen 3 (Turniere, Ligen und Ladder) Tabellen.

                    Hinzu kommt nun noch eine Sortier- und Suchfunktion (siehe Screenshot oberhalb der Liste). Die Suche soll nach Usernamen und Teamnamen funktionieren.

                    Der Username steht in der Tabelle `users` und kann mittels dem Feld `user_id`aus einen der 3 Tabellen (Turniere, Ligen und Ladder) genommen werden.

                    Der Teamname soll in der Tabelle `teams` und dem Feld `namen`gesucht werden. Die Zuordnung geschieht hier wie bei dem Usernamen über das Feld `team` in den 3 Tabellen (Turniere, Ligen und Ladder).

                    Des Weiteren wird eine Sortierung der Liste benötigt. Sortiert werden soll nach Statistikart (Feld `stats` in den Tabellen Turniere, Ligen und Ladder), nach Datum (Feld `datum`in den Tabellen Turniere, Ligen und Ladder), sowie nach Plattform (Feld `plattform` in den Tabellen Turniere, Ligen und Ladder).

                    Das wars. Wenn jetzt noch einer Verständnisfragen hat, so bitte ich um genaue Benennung und nicht einfach nur "Die Infos reichen nicht" (sinngemäß).

                    Vielen Dank im Voraus.

                    Comment


                    • #11
                      Originally posted by richcom View Post
                      Wenn jetzt noch einer Verständnisfragen hat, so bitte ich um genaue Benennung und nicht einfach nur "Die Infos reichen nicht" (sinngemäß).
                      Wie genau willst du es denn noch?
                      Originally posted by defo View Post
                      ...Also schreib Deine Ausgangsdaten hin und die Ergebnisdaten als Beispiel.
                      Originally posted by Falk Prüfer View Post
                      ...mach Beispieldaten für deine Tabellen und das gewünschte Ergebnis für genau diese Beispieldaten.
                      Aber egal, vlt. kann es dir ja der "Laie", der es verstanden hat, beantworten. Ich bin raus!

                      Gruß Falk
                      Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                      Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                      Comment


                      • #12
                        richcom, ich verstehe nicht ganz, warum Du so einen Wirbel machst, aber da Du ja zumindest in diesem Forum neu bist zum Thema:

                        Zunächst gibt's Probleme mit Deinem Beispiel SQL Statement, das nach "Hier mal was ich bis jetzt gemacht habe:" folgt. Die dort verwendete Tabelle "turniere" erläuterst bzw. deklarierst Du nirgendwo, außerdem ist ein Table Alias doppelt. Kann so nicht laufen. Vermutlich falsch ins Forum zusammenkopiert. Das taugt also nicht so gut als Erklärung oder Beschreibung des Status quo. In Deiner Erklärung verwendest Du "Turniere" und "turnier_stats" scheinbar synonym, was aber wohl nicht der Realität entspricht.

                        Trotzdem:
                        Deine 3 Tabellen kannst du bspw. mit einem Union View zusammenfassen (nur die benötigten Felder), nennen wir ihn 'all_stats'.
                        Nebenbei frage ich mal, warum das überhaupt 3 verschiedene Tabellen sind?

                        Statt der Tabelle 'turnier_stats' aus deinem Beispiel-SQL "Turnierstatistik" setzt Du nun den View 'all_stats' ein. Nicht schön, aber das müsste es gewesen sein. Bin mir allerdings nicht sicher, ob Deine Ersetzungen alle weiterhin funktionieren.

                        Dann kannst Du noch hier im Forum lesen, wie man das group by richtig einsetzt, gerade unter mySQL.
                        Gruß, defo

                        Comment

                        Working...
                        X