Ergebnis 1 bis 4 von 4

MySQL: Tabellen-Update in Abhängigkeit einer anderen Tabelle

  1. #1 Zitieren
    Veteran Avatar von MyFreshP
    Registriert seit
    Sep 2010
    Ort
    nicht auf dieser Welt
    Beiträge
    598
    Hi,

    ich habe zwei Tabellen in meiner Datenbank.

    Die erste Tabelle speichert für jeden Spieler die Siege, Niederlagen und Siege in Folge.
    Die zweite Tabelle soll jedoch nur die besten Zehn nach Siegen in Folge speichern, damit beim Abruf der Highscores nicht jedes mal die komplette DB geladen werden muss.

    Versucht habe ich es so:
    Code:
    UPDATE highscore a
    INNER JOIN
    (
    SELECT * FROM score
    ORDER BY streak DESC LIMIT 10
    ) b
    SET a.id = b.id, a.win = b.win, a.defeat = b.defeat, a.streak = b.streak;
    Dann sind allerdings alle 10 Einträge in der Tabelle highscore identisch und zwar gleich der ersten Zeile nach dem Sortieren.

    Wie sorge ich nun dafür, dass die nächsten neun Zeilen auch tatsächlich die Scores der nächsten neun in der Liste haben?
    Betatester bei Xeres' Rückkehr
    MyFreshP ist offline

  2. #2 Zitieren
    Tieftöner Avatar von Lookbehind
    Registriert seit
    Dec 2007
    Beiträge
    15.176
    Dein b ist ein Iterations-Objekt. Aber das wird man dir im Webdesign und Programmier-Forum besser erklären können. *schieb*
    Lookbehind ist offline

  3. #3 Zitieren

    Batmanistrator
    Avatar von Thoronador
    Registriert seit
    Jul 2005
    Ort
    Morrowind, Vvardenfell-Distrikt
    Beiträge
    20.427
    Zitat Zitat von LordEdhor Beitrag anzeigen
    Wie sorge ich nun dafür, dass die nächsten neun Zeilen auch tatsächlich die Scores der nächsten neun in der Liste haben?
    Warum teilst du das nicht in zwei einfachere Abfragen auf? Da die Strukturen der beiden Tabellen ja gleich zu sein scheinen, ließe sich das im Prinzip auch so lösen:
    Code:
    TRUNCATE TABLE a;
    INSERT INTO a SELECT * FROM b ORDER BY streak DESC LIMIT 10
    TRUNCATE leert die Tabelle a, und mit INSERT ... SELECT ... kann man Datensätze, die von einer SELECT-Anweisung geliefert werden, direkt in eine Tabelle einfügen.
    Thoronador ist offline

  4. #4 Zitieren

    Chef Zauberer
    Avatar von Sweil
    Registriert seit
    Apr 2004
    Ort
    Glasgow
    Beiträge
    8.248
    Zitat Zitat von LordEdhor Beitrag anzeigen
    Die zweite Tabelle soll jedoch nur die besten Zehn nach Siegen in Folge speichern, damit beim Abruf der Highscores nicht jedes mal die komplette DB geladen werden muss.
    Das lohnt sich nicht. Dazu müsstest du wirklich große Mengen an Daten haben (5GB+). Schau einfach, dass die Indizes passen (Bsp. MySQL), dann kümmert sich die Datenbank schon selber drum. Unter anderem wird sie intern genau so einen Cache anlegen, wie du ihn hier nachbauen willst.

    Wenn du tatsächlich ein Problem mit der Skalierung haben solltest, dann würde ich dir zu einer Lösung mit memcached raten.
    [Bild: TW3_Ev_04.jpg]
    »Jeder sollte einen Milgo zu Hause haben, denn er verursacht nur sehr geringe Kosten.«
    Sweil ist offline

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •