Ankündigung

Einklappen
Keine Ankündigung bisher.

MySQL komplexe Abfrage

Einklappen

Neue Werbung 2019

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

  • MySQL komplexe Abfrage

    Hallo,

    ich habe eine Tabelle 'statistics' in dieser gibt es die felder: pid, sid, val (player id, statistics id, value).

    die Statistiks id gibt die statistik an, also die id 10 sind z.B. die gesamtkills und die id 11 sind gesamttode.

    Wenn man die beiden teilt erhält man die sogenannte k/d ratio.

    Nun möchte ich die playerid erhalten die, welche die höchste k/d hat... ...

    Wie mache ich das am besten?

    Ich hoffe ich habe mich deutlich genug ausgedrückt.

    Danke im voraus.
    Mit freundlichem Gruß: Killerjo96
    Meine Seite: GearTech

  • #2
    Versuchs damit:

    Code:
    SELECT (s1.val / s2.val) as kd FROM statistics s1 LEFT JOIN statistics s2 ON (s1.pid = s2.pid) WHERE s1.sid = 10 AND s2.sid = 11 ORDER BY kd DESC
    [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

    Kommentar


    • #3
      Okey, das ausführen dauert solange, dass php die operation abbricht.
      Es sind 65252 Spieler in der Datenbank... und es gibt für jeden Spieler ~1500 verschiedene Statistiken.
      Am php server kann ich allerdings überhaupt nichts ändern, ich habe nur select rechte...

      Wahrscheinlich ist es dann einfach nicht möglich...
      Trotzdem danke...

      Edit: Was soll diese Query jetz zurückgeben, die höchste k/d oder die pid?
      Ich möchte die pid xD Hat jetz einmal funktioniert.
      Mit freundlichem Gruß: Killerjo96
      Meine Seite: GearTech

      Kommentar


      • #4
        Zitat von Killerjo96 Beitrag anzeigen
        Okey, das ausführen dauert solange, dass php die operation abbricht.
        Explain, das unbekannte Wesen, ...
        PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

        Kommentar


        • #5
          Zitat von Killerjo96 Beitrag anzeigen
          Wahrscheinlich ist es dann einfach nicht möglich...
          Was bringt dich zu diesem fundierten Schluss? Ein kombinierter Index auf sid und pid und schon ist es möglich.

          Kommentar


          • #6
            Zitat von Killerjo96 Beitrag anzeigen
            Edit: Was soll diese Query jetz zurückgeben, die höchste k/d oder die pid?
            Ich möchte die pid xD Hat jetz einmal funktioniert.
            Nimm deine pid doch mit in die Abfrage rein und du hast beides:
            Code:
            SELECT s1.pid, (s1.val / s2.val) as kd ...
            Frage von mir dazu:
            Angenommen, ich darf oder möchte zur Tabelle keinen Index zufügen, warum auch immer.
            Wäre dann dies eine Möglichkeit mit einem Index dennoch zu arbeiten?
            Code:
            CREATE TEMPORARY TABLE tmp LIKE statistics
            INSERT tmp SELECT * FROM statistics;
            ALTER TABLE tmp ADD INDEX `pid` (`pid`);

            Kommentar


            • #7
              Zitat von jspit Beitrag anzeigen
              Frage von mir dazu:
              Angenommen, ich darf oder möchte zur Tabelle keinen Index zufügen, warum auch immer.
              Wäre dann dies eine Möglichkeit mit einem Index dennoch zu arbeiten?
              Code:
              CREATE TEMPORARY TABLE tmp LIKE statistics
              INSERT tmp SELECT * FROM statistics;
              ALTER TABLE tmp ADD INDEX `pid` (`pid`);
              Ich denke, alleine die Arbeit die die Datenbank mit dem erstellen des Index' hat ist höher als die Abfrage ohne Index...
              [QUOTE=nikosch]Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.[/QUOTE]

              Kommentar


              • #8
                Zitat von tkausl Beitrag anzeigen
                Ich denke, alleine die Arbeit die die Datenbank mit dem erstellen des Index' hat ist höher als die Abfrage ohne Index...
                Ich denke, die Zeit für die Bearbeitung eines Selects mit join kann (in einem gewissen Bereich zumindest) durch ein Polynom 2.Grades angenähert werden.
                Der Aufwand für die Erstellung des Index dürfte dagegen nur linear zunehmen.
                Es sollte also irgendwo ein Schnittpunkt geben, ab dem sich die Erstellung einer 2.Tabelle mit index lohnt.
                Da dies auch meine aktuellen Probleme tangiert, hab ich mal einen kleinen Test gemacht:
                Code:
                10³row	SELECT	Create	INSERT	ALTER	SELECT tmp	Summe tmp
                -----------------------------------------------------------------------
                17	1,1	0,05	0,2	0,31	0,08		0,64
                30	3,4	0	0,3	0,5	0,14		0,94
                41,4	6,5	0,02	0,4	0,65	0,2		1,27
                52,8	10,6	0,02	0,5	0,81	0,27		1,51
                Die Regression von Select-Zeit über die Zeilenanzahl mit einem Polynom ergibt:
                Code:
                Select_Sekunden = 3.87231895·10-3 * (10³row)²- 4.890441034·10-3 * (10³row) + 6.34843982·10-2
                Die Abweichungen zwischen gemessenen und berechneten Werten liegt für den obigen Fall bei wenigen Millisekunden.
                Die Messwerte stärken meine obigen Vermutungen.

                LG jspit

                Kommentar

                Lädt...
                X