Basilius-Network

Das offizielle Forum zum Basilius-Network und aller Komponenten.
Aktuelle Zeit: Do 9. Sep 2010, 23:30

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 
Autor Nachricht
 Betreff des Beitrags: Tips zu Tabellenstrukturen mit Querverweisen
BeitragVerfasst: Do 12. Jul 2007, 17:39 
Offline
Administrator

Registriert: Do 24. Mai 2007, 21:18
Beiträge: 35
Wohnort: Riehen (CH)
Engelsreich-Charakter: Charakter vorhanden
Charakternamen: Sefardius, Schlumpf, Testi
Sagen wir, wir wollen ein Gildensystem schreiben. Um einen User mit einer Gilde zu assoziieren, schreiben wir einfach die Gilden-ID in die Account-Tabelle. Im Prinzip nicht falsch, aber wir laden eigentlich überflüssigen Text in die aktuelle Sitzung. Um das zu verhindern, können wir, anstatt 2 Tabellen ("accounts" und "guilds") auf 3 ausweichen:
  • accounts
  • guild_members
  • guilds
In der Tabelle "guild_members" stehen dabei zum Beispiel Rang, Account-ID und Gilden-ID mit einander verbunden.

Nun ist es aber schwieriger, von einem Spieler auf dessen Gildenzugehörigkeit zu schliessen. Doch es ist nicht unmöglich, ein etwas komplexerer Query hilft uns dabei:
Code:
SELECT a.`name`, g.`name` AS `guildname` FROM `accounts` a
LEFT OUTER JOIN `guild_members` gm ON a.`acctid` = gm.acctid
LEFT JOIN `guilds` g ON gm.guildid = g.guildid


Dieser Query holt zuerst einmal alle Accounts. Dann versucht er, wo möglich, die mit der Tabelle "guild_members" zu verbinden. Wenn keine Verbindung möglich kist (Keine Gildenmitgliedschaft), bekommen alle Felder, die nicht aus der Tabelle "accounts" stammen, den Wert NULL (Nichts, nicht 0!). Weiterhin verbindet er explizit mit der Tabelle "guilds", um den Namen zu holen. Existiert die Gilde nicht (Irgendwas schiefgelaufen?), so bekommen ebenfalls alle Werte, die nicht aus der "accounts" stammen, den Wert NULL.

Weitere Fragen zur Verarbeitung solcher 3er-Verknüpfungen? Schreib mich mit der Frage an und ich beantworte sie hier!


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 1 Beitrag ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Deutsche Übersetzung durch phpBB.de