anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Sa 14 Jun, 2025 23:55

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 16 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Sa 07 Apr, 2007 12:34 
Offline
Lehrling
Lehrling
Benutzeravatar

Registriert: So 12 Feb, 2006 22:20
Beiträge: 49
Wohnort: Berlin
Holla,

Aus der Spinnerei mit einem Bekannten heraus haben wir einige Überlegungen angestellt und nesteln nun an einem Offlineserver in aller Seelenruhe und ohne Hatz an einem System herum, dass es den Usern ermöglichen soll auf Basis eines "Credits-Systemes" Fähigkeitensets zu erstellen, welche für sie Diebeskunst/Mystische Kräfte/Dunkle Künste ersetzen um so jedem Spieler die Möglichkeit zu geben seinen Char völlig zu individualisieren.
Nun würden wir aber ganz gern sehr sparsam mit Datenbankfeldern umgehen und kamen zu der Überlegung Zeichenketten zu nutzen um die Werte in einem einzelnen Datenbankfeld abzuspeichern. Meine Frage ist nun ob es realisierbar ist aus dieser Zeichenkette exakt eine Stelle auszulesen und eventuell auch zu bearbeiten. Zur Veranschaulichung:

123456789

Wenn dass das Feld wäre, würde ich gerne lediglich die "4" auswählen, auslesen und eventuell dann auf eine 6 ändern, sodass es folgendermaßen abgespeichert wird:

123656789

Ist das irgendwie über Select-Befehle zu realiseren um eine einzelne Variable damit zu belegen oder bietet PHP eine solche Funktion um eine bereits gespeicherte Variable so zu verarbeiten?

In diesem Sinne und schoneinmal Danke für eventuelle Hilfe,
Setsna


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 07 Apr, 2007 12:59 
Offline
Freak
Freak
Benutzeravatar

Registriert: Mi 06 Jul, 2005 19:10
Beiträge: 543
Wohnort: Bremen
Geschlecht: Männlich
LoGD: http://my-logd.com/motwd
Einfach Lösung:
Schau dir mal Arrays an.
http://de.php.net/manual/de/language.types.array.php
Diese kannst du dann in einem text-Feld, oder mediumtext-Feld speichern. Je nach länge des Arrays.

Ob dies aber besonders Sinnvoll ist, wage ich zu bezweifeln. Denn der Array muss auch erst ausgelesen werden. Bei grossen Längen, geht dies auch zu ungunsten der Performance der DB.
Ausserdem muss der Array, dann auch mit PHP, oder wie auch immer verarbeitet werden.

Ich würde dir einzelne Felder anraten, welche du logisch in eine/mehrere Tabellen ansiedelst. Nicht so wie in der 0.9.7. Dort haben viele Programmierer alles in die Accountstabelle gekloppt, was überhaupt nicht von nöten war... Aber das ist ein anderes Thema...

_________________
Das schwarze Schaf der LotGD-Community, 2. platzierter, beim Giga.de Homepage-Award 2007 und 1. platzierter beim German Web Award 2008.
PC-ACTION meint: "Sehr gut" für MotWD!
Mind of the White Dragon => http://my-logd.com/motwd


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 07 Apr, 2007 13:01 
Offline
Admin
Admin
Benutzeravatar

Registriert: Di 21 Jan, 2003 01:11
Beiträge: 1604
Wohnort: Haßfurt
Geschlecht: Männlich
LoGD: http://www.anpera.net/logd
Skype: anpera-net
Was spricht gegen Arrays und den serialize-Befehl?

Beispiel:
[php]<?php
$t="text";
$blubb1 = array(5,"hallo",99,$t,8);
echo $blubb1[3]."<br>"; // Ausgabe des 4. Werts im Array. Es wird von 0 an gezählt.
$blubb1[3]="anderer text"; // Der 4. Wert wird geändert. Der Rest des Arrays bleibt unverändert.
$serblubb = serialize($blubb1); // aus $blubb1 wird eine Zeichenkette erzeugt und $serblubb übergeben.
echo $serblubb."<br>";
$blubb2 = unserialize($serblubb); // aus der Zeichenkette wird ein Array erzeugt, das wieder die einzelnen Werte enthält.
echo $blubb2[3];
?>[/php]

Ausgabe:
text
a:5:{i:0;i:5;i:1;s:5:"hallo";i:2;i:99;i:3;s:12:"anderer text";i:4;i:8;}
anderer text


Du kannst den einzelnen Werten auch Namen geben, damit du nicht immer die Stellen durchnummerieren musst.
[php]<?php
$t="text";
$blubb = array(zahl1=>5,gruss=>"hallo",wert=>99,variable=>$t,irgendwas=>8);
echo $blubb['variable']."<br>"; // Der Wert des arrays wird augegeben, dem der Schlüssel "variable" zugeordnet ist.
$blubb['variable']="anderer text"; // Der Wert des Schlüssels "variable" wird geändert.
$serblubb = serialize($blubb);
echo $blubb."<br>";
$blubb = unserialize($serblubb);
echo $blubb['variable'];
?>[/php]

Ausgabe:
text
a:5:{s:5:"zahl1";i:5;s:5:"gruss";s:5:"hallo";s:4:"wert";i:99;s:8:"variable";s:12:"anderer text";s:9:"irgendwas";i:8;}
anderer text


Du würdest deine Werte also in einem Array verarbeiten, vor dem Speichern in der Datenbank "serialisieren", und nach dem Laden aus der Datenbank aus der Zeichenkette wieder ein Array machen.
In der Datenbank würde also die Zeichenkette {s:5:"zahl1";i:5;s:5:"gruss";s:5:"hallo";s:4:"wert";i:99;s:8:"variable";s:12:"anderer text";s:9:"irgendwas";i:8;} in einem eizigen Feld gespeichert werden, und dennoch eine eindeutige Zuordnung der verschiedenen werte möglich sein.

Mehr zu Arrays und (un)serialize findest du in der PHP-Doku... oder in deiner common.php ;)

_________________
Praxis ist, wenn alles klappt aber keiner weiß warum. Theorie ist, wenn man weiß wie es geht, aber nichts klappt. Wir haben beides erfolgreich vereinigt: Bei uns klappt nichts und keiner weiß warum!

Neues Video: Marios freier Tag in Second Life


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 07 Apr, 2007 13:11 
Offline
Lehrling
Lehrling
Benutzeravatar

Registriert: So 12 Feb, 2006 22:20
Beiträge: 49
Wohnort: Berlin
Hm .. *denkt nach*
Inwieweit das ganze Performance/Traffictechnisch effektiver ist müsste ich mir einmal genauer ansehen, die Feldanzahl würde allerdings sehr schnell sehr hoch steigen (Das war der eigentliche Gedanke gewesen, eine neue Tabelle angelegt, zwecks Datenredundanz mit der SpielerID gearbeitet und es dementsprechend getestet, allerdings übersteigt die Anzahl der Felder die 20 bei weitem - so also kam mein Gedanke aus "alten" (18 ist nicht alt, ich weiss *hüstel*) Programmiertagen das ganze so zu realisieren)

An die Arrays hätte ich allerdings denken müssen, danke Anpera für das sehr gute Beispiel ^-^
Ich werde das ganze mit meinem Therap.... Arbeitskollegen besprechen und dann einmal abgleichen, was von beidem im Endeffekt tatsächlich effektiver für uns ist.

Danke für die schnelle Hilfe,
Setsna


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 07 Apr, 2007 13:22 
Offline
Freak
Freak
Benutzeravatar

Registriert: Mi 06 Jul, 2005 19:10
Beiträge: 543
Wohnort: Bremen
Geschlecht: Männlich
LoGD: http://my-logd.com/motwd
Es spricht die Performance dagegen. Sie möchte alle Möglichen Daten, in einem Array speichern.
Also zum Beispiel Boolsche-Werte, etc. Was die Perfomance angeht, ist sie damit mit korrekt Platzierten und Dimensionierten Tabellenfeldern (TINYINT 1 UNSIGNED) besser beraten. Es belegt nämlich nur ein Byte und das wars.

Ich stelle mir einen Array vor, mit hunderten von Einträgen. von denen vielleicht 5 gebraucht werden. Somit haben wir dann hunderte von Datensätzen die niicht gebraucht werden, aber jedesmal komplett aus der DB galden wurden, und komplett auch wieder geschrieben werden.

Unützer Ballast.
Zu mindest so wie sie es vor hat. Ich nutze auch Arrays, klar, aber nicht ein Array für alles...;-)

_________________
Das schwarze Schaf der LotGD-Community, 2. platzierter, beim Giga.de Homepage-Award 2007 und 1. platzierter beim German Web Award 2008.
PC-ACTION meint: "Sehr gut" für MotWD!
Mind of the White Dragon => http://my-logd.com/motwd


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 07 Apr, 2007 20:02 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Um nochmal auf deinen ersten Gedanken zurückzukommen:
Du kannst hier einfach die String-Manipulation nach dem Char-Array Schema anwenden, also auf die einzelnen Zeichen in einem String zugreifen:
[php]$str = "123456789";
echo $str[3]; // gibt "4" aus
$str[3] = "6";
echo "\n<br>\n";
echo $str; // gibt "123456789" aus
?>[/php]

Ich weiß allerdings nict, ob soetwas auch in MySQL selbst möglich ist, denkbar wäre es.
Wichtig: Auch hier fängt man bei 0 an zu zählen! (Anders als beispielsweise in Delphi)

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 07 Apr, 2007 20:05 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Zu deiner Hauptfrage: strpos4() und substr() könnten dir helfen. Und andere Stringfunktionen.. allerdings wird es schnell kompliziert.

Ich hab was ähnliches vor. Da ich LoGD eh am umbauen bin. Und ich hab mir die Skills in etwa so gedacht:

2 Tabellen. Eine Tabelle mit den Rohskills. Und eine zweite, die nur aus AccountID und SkillID besteht. Beide zusammen sind gleichzeitig der Unique-Key. Das ist sicherlich performanter als die Array-Lösung, und auch einfach mit Joins zu verbinden.

@-DoM: tinyint(1) macht keinen Sinn. Da bringst du die Sortierung durch einander :> tinyint(4) ist zu bevorzugen. ;) Die Zahl in den Klammern ist die Stelle, bis wo mit Nullen aufgefüllt wird. Mit 4 wird 128 also 0128 gespeichert. 12 als 0012. Mit 1 wird 128 allerdings als 128 gespeichert, 12 als 12.. Und ich glaube, dass dann 12 vor 128 kommt ;)

@Auric: Zur besseren Unterscheidung zwischen Strings und Arrays sollten bei strings {} zur Positionsangaben gebraucht werden :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 07 Apr, 2007 20:08 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
Das Schema, was Eliwood vor hat mit seinen "Skills", kommt mit sehr von Chaosmaker's Rassen Editor bekannt. Ich meine, er würde in etwa dort das gleiche Schema verfolgen, wie er es vorhat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 07 Apr, 2007 20:18 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Kevz hat geschrieben:
Das Schema, was Eliwood vor hat mit seinen "Skills", kommt mit sehr von Chaosmaker's Rassen Editor bekannt. Ich meine, er würde in etwa dort das gleiche Schema verfolgen, wie er es vorhat.


Es ist die einzige, logische Vorgehensweise. Chris' Itemsystem für die 1.x baut auf dieser Idee aus, viele andere Programme, Applikationen. Und es funktioniert bisher tadellos in meinem Itemsystem.
Wie sein Rasseneditor aufgebaut ist, weiss ich nicht. Allerdings wage ich zu bezweifeln, dass er mehr als eine zusätzliche Tabelle hat... Irgendwie macht das keinen Sinn für Rassen. Da die ja eh in den accounts sind.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 07 Apr, 2007 20:37 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
*g* Grundlage des relationalen Datenbanksystems.. 4 normalform oder so, aber echt ne kamperprobte schose, das system ^^

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 07 Apr, 2007 21:21 
Offline
Freak
Freak
Benutzeravatar

Registriert: Mi 06 Jul, 2005 19:10
Beiträge: 543
Wohnort: Bremen
Geschlecht: Männlich
LoGD: http://my-logd.com/motwd
Eliwood hat geschrieben:
@-DoM: tinyint(1) macht keinen Sinn. Da bringst du die Sortierung durch einander :> tinyint(4) ist zu bevorzugen. ;) Die Zahl in den Klammern ist die Stelle, bis wo mit Nullen aufgefüllt wird. Mit 4 wird 128 also 0128 gespeichert. 12 als 0012. Mit 1 wird 128 allerdings als 128 gespeichert, 12 als 12.. Und ich glaube, dass dann 12 vor 128 kommt ;)

Wo bringe ich etwas durcheinander, wenn ich für boolsche Abfrage 0 und 1 brauche??? Da gibt es nichts zu Sortieren... oO

Und das 12 vor 128 kommt ist auch ganz gut so. Andersrum, wäre eben Falsch herum... :P
Zumal es keine 128 (wenn es nicht unsigned ist) gibt, in einem Tinyint-Feld... :P :lol: :P

0, 1, 2, 3, 4, 5, [....], 12, 13, [....], 127

Zitat:
MySQL-Handbuch
• M
Gibt die maximale Anzeigebreite an. Die größte erlaubte Anzeigebreite ist 255.

• TINYINT[(M)] [UNSIGNED] [ZEROFILL]
Eine sehr kleine Ganzzahl. Der vorzeichenbehaftete Bereich ist -128 bis 127. Der
vorzeichenlose Bereich ist 0 to 255.

Wenn die INT-Spalte UNSIGNED ist, ist die Größe des Wertebereichs dieselbe, aber ihre
Endpunkte verschieben sich zu 0 und 4294967295. Wenn Sie versuchen, -9999999999 bzw.
9999999999 zu speichern, werden die in der Spalte gespeicherten Werte statt dessen zu 0 bzw.
4294967296.


Also wenn ich ein TINYINT (1) unsigned nutze, kann ich sowieso nur fogende Zahlen nutzen:
$this->bbcode_second_pass_code('', '0, 1, 2, 3, 4, 5, 6, 7, 8, 9')

_________________
Das schwarze Schaf der LotGD-Community, 2. platzierter, beim Giga.de Homepage-Award 2007 und 1. platzierter beim German Web Award 2008.
PC-ACTION meint: "Sehr gut" für MotWD!
Mind of the White Dragon => http://my-logd.com/motwd


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 07 Apr, 2007 22:04 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
wer weiss, was die Anzeigebreite wirklich bedeutet.. Ich weiss es nicht. Gerade getestet:
$this->bbcode_second_pass_code('', '--
-- Tabellenstruktur für Tabelle `tinyint_1`
--

CREATE TABLE `tinyint_1` (
`int` tinyint(1) unsigned NOT NULL,
PRIMARY KEY (`int`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Daten für Tabelle `tinyint_1`
--

INSERT INTO `tinyint_1` (`int`) VALUES (0), (1), (5), (10), (20), (100), (128), (244), (255);

-- --------------------------------------------------------

--
-- Tabellenstruktur für Tabelle `tinyint_4`
--

CREATE TABLE `tinyint_4` (
`int` tinyint(4) unsigned NOT NULL,
PRIMARY KEY (`int`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Daten für Tabelle `tinyint_4`
--

INSERT INTO `tinyint_4` (`int`) VALUES (0), (1), (5), (10), (20), (100), (128), (244), (255);')

Gibt keinen sichtbaren Unterschied. Mh. "BOOLEAN" ist leider tinyint(1), und tinyint(1) ist das gleiche wie tinyint(4) o.o
naja. Egal ;) Dachte, im Handbuch stand was von wegen vorgestellten Nullen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 08 Apr, 2007 09:27 
Offline
Freak
Freak
Benutzeravatar

Registriert: Mi 06 Jul, 2005 19:10
Beiträge: 543
Wohnort: Bremen
Geschlecht: Männlich
LoGD: http://my-logd.com/motwd
Also wenn ich versuche in ein TINYINT(1) Feld ne 12 zu schreiben klappt das nicht...

Gibt es Unterschiede zu MySQL 4.x zu 5.x??? Ich weiss es nicht. Anders kann ich mir dein Ergebnis aber nicht erklären...

_________________
Das schwarze Schaf der LotGD-Community, 2. platzierter, beim Giga.de Homepage-Award 2007 und 1. platzierter beim German Web Award 2008.
PC-ACTION meint: "Sehr gut" für MotWD!
Mind of the White Dragon => http://my-logd.com/motwd


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 08 Apr, 2007 10:29 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
-DoM hat geschrieben:
Also wenn ich versuche in ein TINYINT(1) Feld ne 12 zu schreiben klappt das nicht...

Gibt es Unterschiede zu MySQL 4.x zu 5.x??? Ich weiss es nicht. Anders kann ich mir dein Ergebnis aber nicht erklären...


Zitat:
Eine andere Erweiterung wird von MySQL zur optionalen Spezifizierung der Anzeigebreite eines
Integer-Werts unterstützt. Die Angabe erfolgt auf das Schlüsselwort für den Datentyp folgend in
Klammern (z. B. INT(4)). Diese optionale Angabe der Anzeigebreite wird verwendet, um die
Anzeige von Werten, die eine geringere als die für die Spalte festgelegte Breite aufweisen, nach
links mit Leerzeichen aufzufüllen.
Die Anzeigebreite schränkt weder die in einer Spalte speicherbaren Wertebereiche noch die Anzahl
der Stellen ein, die für Werte angezeigt werden, deren Breite die festgelegte Spaltenbreite
überschreitet.


Das steht im Referenzhandbuch der 5.1. Somit lassen sich meine Ergebnisse erklären. Als MySQL-Version gebrauche ich die 5.0.24.

Edit: Mit "ZEROFILL" werden die Nuller aufgefüllt. Ohne sinds Leerzeichen... Wird wahrscheinlich für die Kommandozeilenausgabe gebraucht *g*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 08 Apr, 2007 13:01 
Offline
Lehrling
Lehrling
Benutzeravatar

Registriert: So 12 Feb, 2006 22:20
Beiträge: 49
Wohnort: Berlin
-DoM hat geschrieben:
Ich stelle mir einen Array vor, mit hunderten von Einträgen. von denen vielleicht 5 gebraucht werden. Somit haben wir dann hunderte von Datensätzen die niicht gebraucht werden, aber jedesmal komplett aus der DB galden wurden, und komplett auch wieder geschrieben werden.


Hunderte nicht direkt - ein Array (dessen Länge irgendwo zwischen 20 und 40) und dessen Auslese an das boolsche System angelehnt ist - 0: Nicht belegt 1:belegt. Und abgefragt werden stets alle Werte denn ob ich jeden einzelnen Wert durchgehe und sehe obs 0/1 ist oder ob ich Abfrage ob dieser Wert überhaupt belegt ist sollte die Performance nur geringfügig beeinflussen ;)
Zur Not würde der Satz einmal pro Session geladen werden um die Datenbankzugriffe zu reduzieren (ähnlich Eliwoods Farbensystem) und erst beim Ende der Session mit allen eingetretenen Veränderungen abgespeichert werden.

Eliwood hat geschrieben:
Ich hab was ähnliches vor. Da ich LoGD eh am umbauen bin. Und ich hab mir die Skills in etwa so gedacht:

2 Tabellen. Eine Tabelle mit den Rohskills. Und eine zweite, die nur aus AccountID und SkillID besteht. Beide zusammen sind gleichzeitig der Unique-Key. Das ist sicherlich performanter als die Array-Lösung, und auch einfach mit Joins zu verbinden.


Klingt als ob man Skills kaufen bzw erlernen könnte ;)
Ich selbst stelle es mir im Augenblick so vor einige Attribute anzubieten (Sei's nun Angriffsplus, Lifeleech und was zig Rollenspiele/Hack&Slay krams etc sonst so an Gedanklicher vorarbeit geleistet hat), diese nach einem Punktesystem zu gewichten und dann kann sich der Spieler Individuell seinen Skill Baukastentechnisch zusammensetzen (Wobei je nach Skilllevel mehr Punkte zur Verfügung stehen). Deshalb brauche ich auch den Array um zu prüfen welche Komponente sich der Spieler nun zugekauft hat ;)

Aurics Variante sieht bis jetzt relativ genau nach dem aus, was für meine Vorstellungen reicht, allerdings kam ich noch nicht zum testen.

Was die Diskussion um Eliwoods System angeht - Das ist schlicht und ergreifend die Grundidee jeder performanten Datenbank um das mehrfache Eintragen gleicher Werte zu vermeiden (Datenredundanz - das leidige Thema das jede Datenbankanwendung zum Gedanklichen Horror machen kann)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 08 Apr, 2007 14:26 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Setsna hat geschrieben:
-DoM hat geschrieben:
Ich stelle mir einen Array vor, mit hunderten von Einträgen. von denen vielleicht 5 gebraucht werden. Somit haben wir dann hunderte von Datensätzen die niicht gebraucht werden, aber jedesmal komplett aus der DB galden wurden, und komplett auch wieder geschrieben werden.


Hunderte nicht direkt - ein Array (dessen Länge irgendwo zwischen 20 und 40) und dessen Auslese an das boolsche System angelehnt ist - 0: Nicht belegt 1:belegt. Und abgefragt werden stets alle Werte denn ob ich jeden einzelnen Wert durchgehe und sehe obs 0/1 ist oder ob ich Abfrage ob dieser Wert überhaupt belegt ist sollte die Performance nur geringfügig beeinflussen ;)
Zur Not würde der Satz einmal pro Session geladen werden um die Datenbankzugriffe zu reduzieren (ähnlich Eliwoods Farbensystem) und erst beim Ende der Session mit allen eingetretenen Veränderungen abgespeichert werden.

Eliwood hat geschrieben:
Ich hab was ähnliches vor. Da ich LoGD eh am umbauen bin. Und ich hab mir die Skills in etwa so gedacht:

2 Tabellen. Eine Tabelle mit den Rohskills. Und eine zweite, die nur aus AccountID und SkillID besteht. Beide zusammen sind gleichzeitig der Unique-Key. Das ist sicherlich performanter als die Array-Lösung, und auch einfach mit Joins zu verbinden.


Klingt als ob man Skills kaufen bzw erlernen könnte ;)
Ich selbst stelle es mir im Augenblick so vor einige Attribute anzubieten (Sei's nun Angriffsplus, Lifeleech und was zig Rollenspiele/Hack&Slay krams etc sonst so an Gedanklicher vorarbeit geleistet hat), diese nach einem Punktesystem zu gewichten und dann kann sich der Spieler Individuell seinen Skill Baukastentechnisch zusammensetzen (Wobei je nach Skilllevel mehr Punkte zur Verfügung stehen). Deshalb brauche ich auch den Array um zu prüfen welche Komponente sich der Spieler nun zugekauft hat ;)

Aurics Variante sieht bis jetzt relativ genau nach dem aus, was für meine Vorstellungen reicht, allerdings kam ich noch nicht zum testen.

Was die Diskussion um Eliwoods System angeht - Das ist schlicht und ergreifend die Grundidee jeder performanten Datenbank um das mehrfache Eintragen gleicher Werte zu vermeiden (Datenredundanz - das leidige Thema das jede Datenbankanwendung zum Gedanklichen Horror machen kann)


Ich bin noch immer der Meinung, dass das in einer Extra-Tabelle besser aufgehoben ist. Ähnlich "settings" oder "prefs" in der neuen Version. Also 3-Spaltig: ID, Name des Bonuses, Wert.
Das Auslesen wäre so auch einfach. Zusätzlich könnte man noch cachen..
Vielleicht missverstehe ich dich auch einfach :>


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

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste


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
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum