Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Zwei Tabellen vergleichen - geht es reourcenschonender?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Zwei Tabellen vergleichen - geht es reourcenschonender?

    Ich habe zwei Highscoretabellen "scores_old" und "scores".

    Bildschirmfoto 2010-08-23 um 15.00.34.jpg

    Es soll geschaut werden, welcher Nutzer der Tabelle "scores_old" in Tabelle "scores" ein Rank verloren hat, oder gar ganz herausgefallen ist.

    Beide Tabellen sind komplett gleich aufgebaut.

    Derzeit löse ich es mit einer WHILE Schleife, die jeden einzelnen Eintrag aus der "scores_old" holt und dann in der "score_new" schaut, ob der Rank darin schlechter ist, oder der Spieler ganz herausgefallen ist.

    Leider fallen dabei fast 12.000 SQL-Abfragen in dieser WHILE-Schleife an. Was das Script langsam macht und den Server auslastet.

    Hat jeder einen Stichwort, wie man sowas Resourcenschonender berwerkstelligen könnte. Würde es sich mit zwei verschachtelte SQL-Abftagen schneller und leichter lösen lassen?


    edit: Fast geschafft:

    Code:
    SELECT o.foreign_key, o.level, o.username, o.rank AS rankold, n.rank AS ranknew
    FROM scores_old o, scores n
    WHERE (o.foreign_key LIKE n.foreign_key) 
    AND o.level LIKE n.level
    AND o.username LIKE n.username
    AND n.rank > o.rank
    Damit gebe ich nun die Rank-Veränderung aus. Allerdings glaube ich, dass dort immer noch ein Denkfehler in der Abfrage ist, und mit der Abfrage zuviel abgefragt wird. Dieses Statement benötigt aber immer noch länger als eine Minute, um das Ergebniss zu liefern.

    Zeige Datensätze 0 - 7 (8 insgesamt, die Abfrage dauerte 56.2258 sek.)
    Was bei diese Lösung auch nicht funktioniert ist die Erkenung, wenn ein Spieler gar nicht mehr in der neuen Highscoreliste auftaucht. Er hat somit soviele Ranks verloren, dass er nicht mehr gelistet wird. Das erkennt dieses Statement aber nicht. Das funktkoniert nur bei Spielern, die einen Eintrag in der alten und neuen Highscoretabelle haben.

  • #2
    Vlt mach ichs ja nur umständlich, aber da du ja wissen willst welcher rank sich geändert hat und wer rausgefallen ist hätte ich das so gemacht.
    Vielleicht hilft es dir ja noch weiter.

    Code:
    -- FIND ALL SCORES WHERE RANK CHANGED
    
    SELECT scores.foreignkey, scores.level, scores.username, scores.rank AS `newrank`, scores_old.rank AS `oldrank`, "rank changed" as status
    FROM scores, scores_old 
    WHERE
        scores.username = scores_old.username AND
        scores.foreignkey = scores.foreignkey AND
        scores.level = scores_old.level AND
        scores.level = 1 AND
        scores.rank != scores_old.rank
    
    UNION ALL
    	
    -- FIND ALL USERS THAT FELL OFF THE TABLE
    
    SELECT scores_old.foreignkey, level, username, scores_old.rank AS `oldrank`, NULL as newrank, "not in list anymore" as status
    FROM scores_old 
    WHERE
        scores_old.username NOT IN (
    	SELECT scores.username as userlist 
            FROM scores, scores_old 
                WHERE 
    		scores.foreignkey = scores_old.foreignkey AND
    		scores.level = scores_old.level AND
                    scores.level = 1 AND
    		scores.username = scores_old.username
    	)

    //EDIT wenn du nur wissen willst wer rank verloren hat, und nicht wo sich der rank geändert hat, dann ersetz scores.rank != scores_old.rank wie bei dir schon mit scores.rank < scores_old.rank
    [IMG]http://media.ubuntuusers.de/portal/files/ubuntu.png[/IMG][IMG]http://sqlmanager.net/i/ico/mysql.gif[/IMG][SIGPIC][/SIGPIC]

    Kommentar


    • #3
      Hallo Frank,

      erstmal vielen Dank für dein Beispiel, aber des endet leider in einem:

      You have an error in your SQL syntax

      Ich kann aber beim besten Willen keinen Fehler entdecken.

      Kommentar


      • #4
        Bei mir läuft das ohne Probleme, welche MySQL Version hast du denn und welche Fehlermeldung kommt? Da muss ja einiges an Details kommen wo du den Fehler zu suchen hast.
        [IMG]http://media.ubuntuusers.de/portal/files/ubuntu.png[/IMG][IMG]http://sqlmanager.net/i/ico/mysql.gif[/IMG][SIGPIC][/SIGPIC]

        Kommentar


        • #5
          Wie kommt man auf 12.000 Querys, wenn man zu 20 Einträgen in einer Tabelle ermitteln will, ob es den User auch in einer zweiten Tabelle gibt? Das sind, wenn man brutal innerhalb einer Schleife durch die 20 einen Select auf die andere Tabelle macht genau 21 Queries.

          Mit einem Join von neu auf alt ist es aber nur eine Query:

          Code:
          SELECT 
             neu.username,
             neu.rank as neurank,
             alt.rank as altrank
          FROM 
            scores neu
          LEFT JOIN
            scores_alt alt
          ON
            neu.foreignkey = alt.foreignkey
          Falls in neu ein neuer User auftaucht, dann ist der Wert für alt.score NULL.


          Mit einem Join in umgekehrte Richtung muss man nur auf NULL prüfen um zu sehen, wer ganz rausgefallen ist.
          [PHP]if ($var != 0) {
          $var = 0;
          }[/PHP]

          Kommentar


          • #6
            Zitat von Wolla Beitrag anzeigen
            Wie kommt man auf 12.000 Querys, wenn man zu 20 Einträgen in einer Tabelle ermitteln will, ob es den User auch in einer zweiten Tabelle gibt?
            Das oben ist nur ein Beispiel zu einem Lied (foreign_key). Zu jedem Lied kann es bis zu vier Schwierigkeitsstufen geben. In jeder Schwierigkeitsstufe gibt es die TOP10. Daher sind derzeit 11,671 Einträge in der Tabelle Scores. Woraus sich die knapp 12.000 Queries bezogen, in meiner ersten WHILE-Schleifen Pfusch-Lösung.

            Kommentar


            • #7
              Zitat von Wolla Beitrag anzeigen
              Mit einem Join von neu auf alt ist es aber nur eine Query:
              Code:
              SELECT 
                 neu.username,
                 neu.rank as neurank,
                 alt.rank as altrank
              FROM 
                scores neu
              LEFT JOIN
                scores_old alt
              ON
                neu.foreign_key = alt.foreign_key
              Dieser Query lief 12 Minuten und brachte 265.981 Ergebnisse.

              Kommentar


              • #8
                @Frank: Das Statement von dir läuft jetzt doch ohne Fehlermeldung. Weiss wirklich nicht, woran beim ersten mal der Fehler lag.

                Die Abfrage lief auch an die 10 Minuten und brachte leider auch nur "Datenmüll" zum Vorschein: 48.015 Ergebnisse.

                Richtig wären 7 Spieler, bei denen sich der Highscore geändert hat.


                edit: Ich glaube, dass das Problem noch das "level" ist.For jede "foreign_key" kann es bis zu vier verschiedene Levels geben. Siehen erster Screenshot im ersten Posting. Für den "foreign_key" gibt es ein level "1" mit je zehn Highscoreeinträgen und ein "level" 3 mit zehn Highscoreeinträgen.

                Vielleicht ist dass das Problem, warum eure Beipsielscripst nicht das richtig Ergebniss liefert.

                Kommentar


                • #9
                  Dann gibt es zwei Ursachen.
                  1.) Dein Datenbestand ist inkonsistent
                  2.) Dein oben gezeigtes Muster entspricht nicht der eigentlichen Tabelle

                  Denn folgende Testumgebung erzeugt den richtigen Output

                  Code:
                  -- phpMyAdmin SQL Dump
                  -- version 3.2.4
                  -- http://www.phpmyadmin.net
                  --
                  -- Host: localhost
                  -- Erstellungszeit: 23. August 2010 um 20:02
                  -- Server Version: 5.1.41
                  -- PHP-Version: 5.3.1
                  
                  SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
                  
                  --
                  -- Datenbank: 'phpde'
                  --
                  
                  -- --------------------------------------------------------
                  
                  --
                  -- Tabellenstruktur für Tabelle 'scores'
                  --
                  
                  DROP TABLE IF EXISTS scores;
                  CREATE TABLE scores (
                    foreignkey varchar(64) NOT NULL DEFAULT 'PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C',
                    `level` int(11) NOT NULL DEFAULT '1',
                    username varchar(32) NOT NULL,
                    rank int(11) NOT NULL
                  ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
                  
                  --
                  -- Daten für Tabelle 'scores'
                  --
                  
                  INSERT INTO scores (foreignkey, level, username, rank) VALUES
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'a', 1),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'b', 6),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'c', 3),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'd', 4),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'a', 1),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'f', 2),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'g', 7),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'h', 8),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'i', 9),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'j', 18),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'b', 6),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'c', 3),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'd', 4),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'f', 2),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'g', 7),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'h', 8),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'i', 9),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'j', 18);
                  
                  -- --------------------------------------------------------
                  
                  --
                  -- Tabellenstruktur für Tabelle 'scores_old'
                  --
                  
                  DROP TABLE IF EXISTS scores_old;
                  CREATE TABLE scores_old (
                    foreignkey varchar(64) NOT NULL DEFAULT 'PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C',
                    `level` int(11) NOT NULL DEFAULT '1',
                    username varchar(32) NOT NULL,
                    rank int(11) NOT NULL
                  ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
                  
                  --
                  -- Daten für Tabelle 'scores_old'
                  --
                  
                  INSERT INTO scores_old (foreignkey, level, username, rank) VALUES
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'a', 1),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'b', 2),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'c', 3),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'd', 4),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'e', 5),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'f', 6),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'g', 7),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'h', 8),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'i', 9),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 1, 'j', 10),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'a', 2),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'b', 6),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'c', 3),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'd', 5),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'f', 2),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'g', 7),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'h', 8),
                  ('PIB5HEFT-IAFN-ZXID-L0Y2-FSFA1TKZRJ2C', 3, 'j', 10);
                  
                  
                  
                  
                  
                  
                  -- FIND ALL SCORES WHERE RANK CHANGED
                  
                  SELECT scores.foreignkey, scores.level, scores.username, scores.rank AS `newrank`, scores_old.rank AS `oldrank`, "rank changed" as status
                  FROM scores, scores_old 
                  WHERE
                      scores.username = scores_old.username AND
                      scores.foreignkey = scores.foreignkey AND
                      scores.level = scores_old.level AND
                      scores.level = 1 AND
                      scores.rank < scores_old.rank
                  
                  UNION ALL
                  	
                  -- FIND ALL USERS THAT FELL OFF THE TABLE
                  
                  SELECT scores_old.foreignkey, level, username, scores_old.rank AS `oldrank`, NULL as newrank, "not in list anymore" as status
                  FROM scores_old 
                  WHERE
                      scores_old.username NOT IN (
                  	SELECT scores.username as userlist 
                          FROM scores, scores_old 
                              WHERE 
                  		scores.foreignkey = scores_old.foreignkey AND
                  		scores.level = scores_old.level AND
                                  scores.level = 1 AND
                  		scores.username = scores_old.username
                  	)
                  Wie wäre es, wenn du uns einen Export deiner Datenbank zum experimentieren bereitstellst und nochmal genau beschreibst was du abfragen möchtest.
                  [IMG]http://media.ubuntuusers.de/portal/files/ubuntu.png[/IMG][IMG]http://sqlmanager.net/i/ico/mysql.gif[/IMG][SIGPIC][/SIGPIC]

                  Kommentar


                  • #10
                    Zitat von Frank Beitrag anzeigen
                    Wie wäre es, wenn du uns einen Export deiner Datenbank zum experimentieren bereitstellst und nochmal genau beschreibst was du abfragen möchtest.
                    Mache ich gerne. Und super vielen Dank, dass du dir soviel Zeit nimmst mir zu helfen.

                    Also hier der Dump der Highscoredatenbank "scores": http://www.welovetaptap.com/scores.sql.gz

                    Kopiere diese Tabelle dann noch einmal und nenne sie "scores_old".

                    In der Datenbank mit "scores" (Tabelle mit den neuen Highscores) verschlechterst du einen Rank von einem Spieler.



                    edit: Ich habe deine Beispiel-DB samt Query probiert, und es funktioiniert genauso wie ich es eigentlich haben wollte. Das "scores.level = 1" hab ich rausgenommen, sonst wird ja nur ein bestimmtes Level angezeigt.

                    Warum das bei meiner original DB nicht funktioniert werde ich jetzt mal versuchen herauszufinden.

                    1.) Dein Datenbestand ist inkonsistent
                    Das ist eigentlich die einzige Erklärung.

                    Kommentar


                    • #11
                      Eine Ergebnismenge mit 250.000 Elementen ist für Mysql doch Pipifax. Wenn das bei dir 12 Minuten läuft, dann hast du keine Indexe auf den foreignkeys oder kaputte Tabellen.
                      [PHP]if ($var != 0) {
                      $var = 0;
                      }[/PHP]

                      Kommentar


                      • #12
                        Wie Frank schon erwähnt hatte, scheint was mit den Daten nicht zu stimmen. Ich habe hier einen ganz kleinen Ausschnitt der gesamten Highscorelist mit lediglich 70 Einträgen.

                        Bereits bei diesem Datenbestand werden schon zwei Spieler mit unterschiedlichem Rank ausgegeben, obwohl ich die gleichen Tabelle einfach kopiert habe, und diese zwei Tabellen dann miteinander verglichen wurden.

                        Mit diesem Datenbestand wird mit Franks Query folgende zwei Benutzer ausgegeben:
                        Bildschirmfoto 2010-08-23 um 21.45.01.jpg

                        Aber deren Rank hat sich nicht verändert, da "scores" eine exakte Kopie von "scores_old" ist.
                        Angehängte Dateien

                        Kommentar


                        • #13
                          Wollas Lösung erzeugt folgendes Ergebnis:
                          Angehängte Dateien

                          Kommentar


                          • #14
                            Also hier ein Beispiel.

                            Es wird eine kleine Highscoreliste "scores" erzeugt. Diese wird kopiert und der Vergleich gestartet, bei welchen Usern sich der Rank verschlechter hat.

                            Das Ergebnis lautet:
                            Bildschirmfoto 2010-08-24 um 14.42.10.png

                            obwohl die zwei Tabellen absolut identisch sind.

                            Code:
                            -- ###############
                            -- Highscores Datenbank "scores" anlegen
                            -- ###############
                            DROP TABLE IF EXISTS `scores`;
                            CREATE TABLE IF NOT EXISTS `scores` (
                              `foreign_key` varchar(80) NOT NULL,
                              `level` int(11) NOT NULL,
                              `username` varchar(100) NOT NULL,
                              `rank` int(11) NOT NULL,
                              KEY `foreign_key` (`foreign_key`)
                            ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
                            
                            -- ###############
                            -- Highscoredatenbank "scores" mit Daten befüllen
                            -- ###############
                            INSERT INTO `scores` (`foreign_key`, `level`, `username`, `rank`) VALUES
                            ('song1', 2, 'Woody93', 9),
                            ('song1', 2, 'say892', 2),
                            ('song1', 4, 'Ansar', 8),
                            ('song1', 4, 'Papas_Con_Chile', 9),
                            ('song1', 2, 'AnjaHillermann', 1),
                            ('song1', 2, 'DusTheLadiesMan', 10),
                            ('song1', 2, 'vancz', 3),
                            ('song1', 2, 'kennken', 4),
                            ('song1', 2, 'ifarttoomuch', 5),
                            ('song1', 2, 'kirstybabeee', 6),
                            ('song1', 2, 'xXChRiSYy', 7),
                            ('song1', 2, 'Cedrik94', 8),
                            ('song1', 4, 'Lieutenant_Renji', 1),
                            ('song1', 4, 'sdtddr', 4),
                            ('song1', 4, 'beefydia', 5),
                            ('song1', 4, 'TroIIiej', 10),
                            ('song1', 4, 'adgnehzraes', 3),
                            ('song1', 4, 'TitonChris', 6),
                            ('song1', 4, 'Mike_Duque', 7),
                            ('song1', 4, 'taptapkingbest', 2),
                            ('song2', 4, 'ZondaR2', 5),
                            ('song2', 4, 'vic318', 6),
                            ('song2', 4, 'Chaoz_', 4),
                            ('song2', 4, 'AnjaHillermann', 1),
                            ('song2', 4, 'loolppp', 8),
                            ('song2', 3, 'lincolnng', 8),
                            ('song2', 3, 'inoinodragon', 7),
                            ('song2', 3, 'myunhappybirthday', 6),
                            ('song2', 3, 'Ambiguity', 5),
                            ('song2', 3, 'kakithk', 4),
                            ('song2', 3, 'BadAzItGitz', 3),
                            ('song2', 3, 'TehRandomGuy', 2),
                            ('song2', 3, 'AnjaHillermann', 1),
                            ('song2', 4, 'burbsi', 3),
                            ('song2', 4, 'Robiiii', 2),
                            ('song2', 4, 'luisast95', 9),
                            ('song2', 4, 'zhoomcar', 10),
                            ('song2', 4, 'ddvictord', 7),
                            ('song2', 3, 'chibidibi', 9),
                            ('song2', 3, 'TopX', 10),
                            ('song4', 3, 'panpizza', 2),
                            ('song4', 2, 'Woody93', 10),
                            ('song4', 2, 'stevey123', 9),
                            ('song4', 3, 'chavachai', 10),
                            ('song4', 3, 'AnjaHillermann', 1),
                            ('song4', 3, 'joyeeeee', 3),
                            ('song4', 3, 'Liebelein', 7),
                            ('song4', 3, 'Kev97', 6),
                            ('song4', 3, 'LadyMacDeath', 5),
                            ('song4', 3, 'MartinGlight', 4),
                            ('song4', 2, 'darren230', 7),
                            ('song4', 2, 'Martelis', 8),
                            ('song4', 2, 'djcesc17', 4),
                            ('song4', 2, 'DocoHD', 5),
                            ('song4', 2, 'joyeeeee', 2),
                            ('song4', 2, 'Liebelein', 1),
                            ('song4', 3, 'B3RV3R', 9),
                            ('song4', 2, 'WolfenGarbon', 6),
                            ('song4', 2, 'AnjaHillermann', 3),
                            ('song4', 3, 'kirstybabeee', 8);
                            
                            
                            
                            -- ###############
                            -- Highscores Datenbank "scores" kopieren zu "scores_old"
                            -- ###############
                            DROP TABLE IF EXISTS `scores_old`;
                            
                            CREATE TABLE  scores_old (
                            `foreign_key` VARCHAR( 80 ) NOT NULL ,
                             `level` INT( 11 ) NOT NULL ,
                             `username` VARCHAR( 100 ) NOT NULL ,
                             `rank` INT( 11 ) NOT NULL ,
                            KEY  `foreign_key` (  `foreign_key` )
                            ) ENGINE = MYISAM DEFAULT CHARSET = latin1;
                            
                            
                            INSERT INTO scores_old SELECT * FROM  scores;
                            
                            
                            -- ###############
                            -- Vergleiche die zwei DBs
                            -- ###############
                            SELECT scores.foreign_key, scores.level, scores.username, scores.rank AS `newrank`, scores_old.rank AS `oldrank`, "rank changed" as status
                            FROM scores, scores_old 
                            WHERE
                                scores.username = scores_old.username AND
                                scores.foreign_key = scores.foreign_key AND
                                scores.level = scores_old.level AND
                                scores.rank < scores_old.rank
                            
                            UNION ALL
                            	
                            SELECT scores_old.foreign_key, level, username, scores_old.rank AS `oldrank`, NULL as newrank, "not in list anymore" as status
                            FROM scores_old 
                            WHERE
                                scores_old.username NOT IN (
                            	SELECT scores.username as userlist 
                                    FROM scores, scores_old 
                                        WHERE 
                            		scores.foreign_key = scores_old.foreign_key AND
                            		scores.level = scores_old.level AND
                            		scores.username = scores_old.username
                            	);

                            Kommentar


                            • #15
                              Ich habe den Beispiel Query von Wolla bearbeitet und es funktioniert. Und die Abfrage dauert mit diesem Statement auch keine 12 Minuten mehr, sondern nur noch einen Sekundenbruchteil.

                              Code:
                              SELECT 
                                 neu.foreign_key,
                                 neu.level,
                                 neu.username,
                                 neu.rank as neurank,
                                 alt.rank as altrank
                              FROM 
                                scores neu 
                              LEFT JOIN
                                scores_old alt
                              ON
                                neu.foreign_key = alt.foreign_key AND
                                neu.level = alt.level AND
                                neu.username = alt.username
                              WHERE neu.rank > alt.rank

                              Kommentar

                              Lädt...
                              X