ServerPlugin Top 3 Spieler

Dieses Thema im Forum "Programmierung" wurde erstellt von Verschraubt, 13. November 2015.

  1. Verschraubt
    Online

    Verschraubt

    Hallo Community!
    Ich benötige eine Methode, die mir 3 Spieler angibt, die die meisten Coins gesammelt haben.
    Die Spieler uuid (uuid) sowie die Anzahl der Coins (coins) werden in einer MySQL Datenbank (coins) abgespeichert.
    Nun meine Frage: Wie bekomme ich die 3 Spieler aus der Datenbank raus?

    Mein vergeblicher Versuch:
    Code (Text):
    1. public static String getTopTenCoins() {
    2.        
    3.         String name = null;
    4.  
    5.         try {
    6.             ResultSet rs = MySQL.Query("SELECT TOP(3) * FROM coins ORDER BY coins DESC");
    7.             if (rs.next()) {
    8.                 int x = rs.getInt(1);
    9.                 ResultSet rs2 = MySQL.Query("SELECT uuid FROM coins WHERE coins='" + x + "'");
    10.                 if (rs2.next()) {
    11.                     name = Bukkit.getPlayer(rs2.getString(1)).getName();
    12.                    
    13.                 }
    14.  
    15.             }
    16.         } catch (SQLException e) {
    17.             System.out.println("FEHLER");
    18.         }
    19.         return name;
    20.     }


    Ich möchte anmerken, dass ich mich so gut wie garnicht mit MySQL auskenne...
     
    #1
  2. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    654
    SELECT * FROM tabellenname ORDER BY spaltenname DESC LIMIT 3
     
    #2
    McLive gefällt das.
  3. Verschraubt
    Online

    Verschraubt

    Ich bekomme nur eine leere Nachricht gesendet.

    Was bekomme ich denn zurück, wenn ich die top 3 Spieler auswähle? Einen String[]?
     
    #3
  4. Verschraubt
    Online

    Verschraubt

    Was mir noch aufgefallen ist:
    Code (Text):
    1. [23:48:12 INFO]: FEHLER
    2.  
    Das beruft sich auf eine Zeile:
    Code (Text):
    1.     public static String getTopTenCoins() {
    2.      
    3.         String name = null;
    4.      
    5.      
    6.  
    7.         try {
    8.             ResultSet rs = MySQL.Query("SELECT * FROM coins ORDER BY coins DESC LIMIT 3");
    9.             if (rs.next()) {
    10.                 int x = rs.getInt(1);
    11.                 ResultSet rs2 = MySQL.Query("SELECT uuid FROM coins WHERE coins='" + x + "'");
    12.                 if (rs2.next()) {
    13.                     name = Bukkit.getPlayer(rs2.getString(1)).getName();
    14.                  
    15.                 }
    16.  
    17.             }
    18.         } catch (SQLException e) {
    19.             System.out.println("FEHLER");
    20.         }
    21.         return name;
    22.     }
    Da muss irgendetwas nicht stimmen
     
    #4
  5. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    654
    Ich glaub du solltest erstmal die Grundlagen mit MySQL lernen, du bekommst ein ResultSet zurück dass deine Anfrage enthält. Das was ich dir da gepostet hab gibt dir die Top 3 Spieler zurück, ich weiß nicht was der if-Block danach soll. Ich hab aber auch ehrlich gesagt keine Lust dir da fertigen Code zu geben. 1. Weil ich keinen fertigen Code hab und 2. wil ich der Meinung bin, dass du das auch selbst lernen kannst, sonst musst du bei der nächsten Query wieder im Forum fragen. Wenn du PHPMyAdmin oder was anderes verwendest kannst du dort deine Query ja auch schon ausprobieren.

    Und weil ich's grad noch gesehen habe: Informier dich über SQL Injections, sonst hast du bald Sicherheitslücken in deinem Server.
     
    #5
  6. Verschraubt
    Online

    Verschraubt

    Danke für deinen Tipp. Hatte schon vor, mir MySQL genauer anzuschauen. Bloß jetzt brauchte ich eine schnelle Lösung und habe hier nach einer Antwort gesucht.
     
    #6
  7. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    Programme, die du aus solchen schnellen Lösungen zusammensetzt haben den Ruf und bestätigen diesen, am eine ein kaum zu skalierender, minderwertig effizienter Flickenteppich zu sein. Fang lieber klein an und mach es dann richtig. Wenn du dich nicht mit MySQL auskennst, solltest du ganz klein anfangen und z.B. mit phpmyadmin erst einmal ausprobieren, wie du einen Query richtig aufbuast und auswertest.
    Wenn ich deinen Code sehe merke ich sofort, dass du das irgendwo abgeschrieben hast, schon der zweite Query, den du überflüssigerweise machst, verrät dies.

    Auch von Sortierverfahren und ähnlichem scheinst du nie etwas gehört zu haben. Was passiert mit deinem Code zum Beispiel, wenn zwei Spieler gleich viele Coins haben? Würde dann immer der zuerst in die Datenbank eingetragene "gewinnen"?

    Mach dir solche Fragen klar und probiere an kleinen Beispielen verschiedene Szenarien aus, sonst wirst du niemals dahin kommen, dass du solche "Probleme" alleine lösen kannst.
     
    #7
  8. Verschraubt
    Online

    Verschraubt

    Stimmt leider...

    Hast wahrscheinlich Recht. Nagut, dann fang ich gleich mal an. Kannst du ein Tutorial oder ein Buch empfehlen?
     
    #8
  9. Victini151
    Online

    Victini151

    #9
  10. Verschraubt
    Online

    Verschraubt

    Danke @Victini151!
    Das Tutorial hat mir sehr geholfen. Ich konnte das Problem jetzt lösen.
     
    #10