Top stats script problem

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

  • Top stats script problem

    Hallo ihr lieben

    So... Wie soll ich anfangen.

    Ich möchte aus einer Datenbank eines Spiels die top 5 spieler rausfischen die am meissten Leute getötet haben. Folgendes Problem die Kills stehn in der Tabelle Characters -> Data das problem ist das im Data mehrere sachen drin stehn und zwar um genau zu sein mehr als 1800 einträge die mit einer leerstelle getrennt sind. Ich weiss das man da explode benutzten kann aber dann ist noch immer das problem wie ich die mit ORDER BY DESC auslesen kann.

    Beispiel damit ihr es noch besser versteh:

    Code:
    SELECT * FROM characters ORDER BY data(explode..nr1517)
    Also die kills sind im data wenn man den explodet nr 1517

  • #2
    /.../mehrere sachen drin stehn und zwar um genau zu sein mehr als 1800 einträge die mit einer leerstelle getrennt/.../
    Kannst Du das konkretisieren? Tabellenstruktur und Beispiele sind hier hilfreich.

    GZ,

    Ron

    Kommentar


    • #3
      Hallo,

      MySQL hat kein explode und mit PHP müsstest du das order by selbst bauen. Es gibt für deine "Datenbank" keine Möglichkeit, das von dir gewünschte vernünftig abzurufen. Daher ist es ratsam, die nochmal neu aufzusetzen, denn mit etwas, das nicht einmal die 1. Normalform erfüllt, hättest du so oder so auf Dauer mehr Ärger als Spaß.

      Gruß,

      Amica
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #4
        AmicaNoctis, leider ist das eine Datenbank von einem Spielserver und wenn ich die umändere puh

        Hallo Code-kobold nochmal

        Code:
        CREATE TABLE IF NOT EXISTS `characters` (
          `guid` int(11) unsigned NOT NULL default '0' COMMENT 'Global Unique Identifier',
          `account` int(11) unsigned NOT NULL default '0' COMMENT 'Account Identifier',
          `data` longtext,
          `name` varchar(12) NOT NULL default '',
          `race` tinyint(3) unsigned NOT NULL default '0',
          `class` tinyint(3) unsigned NOT NULL default '0',
          `gender` tinyint(3) unsigned NOT NULL default '0',
          `level` tinyint(3) unsigned NOT NULL default '0',
          `xp` int(10) unsigned NOT NULL default '0',


        so sieht die aus (zumindest ein teil davon :P) und wie gesagt die kills stehn im data feld
        Zuletzt geändert von Veldor; 16.11.2009, 15:19.

        Kommentar


        • #5
          Tja, da musst du wohl oder übel durch. Einzige Alternative ist, die Daten alle Spieler einzulesen und mit PHP sortieren. Aber das kann u.U. ganz schön lange dauern (und mit irgendwelchen Regular Expressions fangen wir bei der Datenstruktur auch gar nicht erst an)!
          [FONT="Helvetica"]twitter.com/unset[/FONT]

          Shitstorm Podcast – Wöchentliches Auskotzen

          Kommentar


          • #6
            Dann musst du wohl oder übel die data-Spalte mit like filtern (oder im Falle von MyISAM einen Fulltext-Index drauf setzen) und die endgültige Prüfung und Sortierung in PHP machen. Das kostet aber spürbar Speicher und Laufzeit.

            Daher rate ich immer noch dazu, die ein oder zwei Tabellen dazu zu bauen. An der Software brauchst du nicht einmal viel ändern, weil du dir ja ein View bauen kannst, in dem diese data-Spalte mit group_concat und einem Join auf die N:M-Tabelle simuliert wird.

            Das ist also gar kein Drama und lohnt sich aus Performancegründen absolut.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Hallo AmicaNoctis das hört sich interessant an obwohl ich da 0 versteh werde mir aber mal auf der php seite ansehn wie das funktioniert. Wenn du weitere informationen hast bin ich gerne offen

              Kommentar


              • #8
                Zitat von Veldor Beitrag anzeigen
                Wenn du weitere informationen hast bin ich gerne offen
                Google mal nach "Normalform" und/oder "BCNF". Da findest du massig Ressourcen (auch mit Beispielen) die dir helfen, deine Datenbank zu normalisieren. Dann guckst du dir noch die Themen "left join", "group by", "group_concat" und "create view" an (vorzugsweise im MySQL Handbuch) und setzt das für dich um.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  Wie unset bereits schrieb, kannst du mit einem simplen PHP-Skript den Inhalt deiner DB zeilenweise auslesen, die Spalte data in ein Array exploden und Array-Index 1516 verarbeiten, falls deine Serverumgebung dies gestattet (Perfomance).

                  Allerdings solltest du dringend Amicas Vorschlag folgen, und die DB normalisieren; du wirst es nicht bereuen!

                  GZ,

                  Ron

                  Kommentar

                  Lädt...
                  X