Ankündigung

Einklappen
Keine Ankündigung bisher.

Suche Max über mehrere Tabellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Suche Max über mehrere Tabellen

    Hallo Forum,

    ich habe folgendes Problem:
    Ich habe mehrere Tabellen, die nach dem folgenden Muster aufgebaut sind:


    Die Tabellen sind wie folgt benamt:
    rangliste_2013_01 bis rangliste_2013_10
    rangliste_2014_01 bis rangliste_2014_10 usw, also für jedes Jahr 10 Tabellen.

    Ich möchte jetzt einen MySQL Befehl bauen, der mir anhand einer vorgegebenen Spieler-ID (1. Spalte) über alle Tabellen mit dem Namen rangliste_* aus der Spalte HighestGame des jeweiligen Spielers das höchste Ergebnis ausgibt.
    Ist das überhaupt realisierbar, und wenn ja, wie muss ich da rangehen?

    Wäre nett, wenn jemand einen Tipp für mich hätte.

    LG Micha

  • #2
    Du könntest dir per Stored Procedure oder über eine Programmiersprache, erst die verschiedenen Tabellen zusammensuchen und dir dann die Query generieren.
    Du könntest z.B. für jede Tabelle eine eine Abfrage erstellst und die Abfragen am Ende per UNION zusammenführst.
    Oder du lädst die Daten der Tabellen dann in eine View / temporäre Tabelle / Tabelle zum Zwischenspeichern, fügst eine Spalte an um zu kennzeichnen aus welcher Tabelle die jeweiligen Datensätze waren und arbeitest dann mit MAX() und GROUP BY.

    Wären 2 simplere Lösungsansätze.
    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    Kommentar


    • #3
      Hi VPH,

      Danke für den Tipp, und bei simpler Lösung wären schon wieder beim nächsten Problem. Ich kenn mich leider nur rudimentär mit SQL aus, das übersteigt glaub ich meinen Horizont.
      Ich denke, der erste Schritt ist der richtig für mich, ich würde die vorhandenen Tabellen mit einer Schleife in PHP durchlaufen, den Wert aus HighestGame in ein Array schreiben und mir so den höchsten Wert ermitteln.

      Ich dachte das könnte man einfacher direkt in einem sql-statement erledigen...
      Da fehlt mir allerdings der nötige Background...

      Kommentar


      • #4
        Zitat von doofi Beitrag anzeigen
        Ich kenn mich leider nur rudimentär mit SQL aus
        Dann lies dich mal zu Normalisierung und anderen Prinzipien bei relationalen Datenbanken ein. Wenn Tabellen- und Spaltennamen mit Nummern versehen sind läuft fast immer etwas schief.

        Kommentar


        • #5
          Ah, das anzumerken hatte ich ganz vergessen
          [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
          [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

          Kommentar


          • #6
            Höchster wert eines Tages

            Verschoben

            Kommentar


            • #7
              Zitat von fume Beitrag anzeigen
              Ich bin gerade von sqlite auf mysql umgestiegen. In sqlite funktioniert die abfrage einwandfrei.
              Wo könnte der Fehler der meiner Abfrage liegen.
              Das ist Schade. Also daß Sqlite diesen Syntaxfehler nicht erkennt. ich dachte, nur MySQL ist so behindert.

              Also: in Abfragen mit Aggregationen müssen alle Ergebnisspalten entweder aggregiert oder gruppiert werden. Prüf Deine Abfrage, dies ist nicht der Fall. Die DB ist so frei, Dir ein mehr oder weniger zufälliges Resultat zu liefern.

              Was kannst Du tun?
              • zurück zu Sqlite. Bis das da gefixt ist. Ist also eine tickende Zeitbombe.
              • weiter bei MySQL. Wird demnächst gefixt, ab 5.7.5 oder so erkennt MySQL den Fehler
              • gleich eine richtige DB nehmen, die zu mehr Sorgfalt zwingt und dafür mit korrekten Resultaten belohnt.
              PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

              Kommentar

              Lädt...
              X