wenn die db zuerst "joint" und dann "wheret"
Effiziente Implemetierung gesucht
Einklappen
X
-
Wow, eine richtige Expertendebatte, wie es scheint.
Noch eine andere Frage:
Meine Gegenstände haben sehr unterschiedliche Eigenschaften, von denen einige nur bei sehr wenigen Gegenständen auftreten. Da wäre es doch Verschwendung, für jede Eigenschaft ein eigenes Feld zu machen. Wie löst man dieses Problem am besten? Ich habe gedacht, man könnte die Eigenschaften einfach in ein TEXT Feld schreiben und dann vom Programm Parsen lassen, aber was weiss ich schon?
Kommentar
-
auch hier macht so eine verbindungstabelle sinn.
du hast gegenstände in einer tabelle und eigenschaften in einer anderen tabelle.
nun kannst du die eigenschaften den gegenständen in einer verbindungstabelle (wie schon bei user<->gegenstand) zuordnen.
EDIT:
grammatik-update...Zuletzt geändert von Abraxax; 29.07.2003, 23:10.INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |
Kommentar
-
Tatsächlich. Tja, wenn man blind im Hirn ist wie ich, kommt man halt nicht von selbst auf solche Ideen. Vielen Dank. Dann kann ich mich jetzt mal dahintersetzen und die Skripte programmieren. Ihr seht, es war wohl nicht das letzte Mal, dass ihr von mir gehört habt .
Kommentar
-
wir werden sehen...
aber nur mal als tipp am rande....
bevor du überhaupt anfängst, irgendwelche scripte zu schreiben, erstelle erst einmal die komplette datenbank. denn wenn du hier schon mist machst, hast du hinterher richtige probleme.
denn ..... man ändert die struktur der datenbank nicht einfach.
also lasse uns teilhaben an deinen geistigen ergüssen und poste uns dann mal deine tabellenstruktur zur ansicht. aber bitte erst, nachdem du selber gedacht und das ganze schon fertig entworfen hast...INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |
Kommentar
-
Gut, dann habt ihr hier mal die Strukturen:
Code:Database wizardry Table wizards wizard_id INT UNSIGNED AUTO_INC PRIMARY KEY wizard_name VARCHAR(32) BINARY UNIQUE password VARCHAR(32) BINARY status TINYINT UNSIGNED DEFAULT 0 created DATETIME last_login DATETIME exp_total INT UNSIGNED DEFAULT 0 exp_used INT UNSIGNED DEFAULT 0 alignment TINYINT UNSIGNED DEFAULT 0 Table spells spell_id INT UNSIGNED AUTO_INC PRIMARY KEY spell_name VARCHAR(32) BINARY UNIQUE type TINYINT UNSIGNED color TINYINT UNSIGNED costs_any TINYINT UNSIGNED costs_color TINYINT UNSIGNED Table attributes attribute_id INT UNSIGNED AUTO_INC PRIMARY KEY attribute_name VARCHAR(32) BINARY UNIQUE parameterlist VARCHAR(32) BINARY Table wizardspells ws_wizard_id INT UNSIGNED ws_spell_id INT UNSIGNED count SMALLINT UNSIGNED Table spellattributes sa_spell_id INT UNSIGNED sa_attribute_id INT UNSIGNED
Zuletzt geändert von zagibu; 30.07.2003, 13:46.
Kommentar
-
so. nun aber noch die frage wie du deine tabellen verbunden hast.
denn das bisher oben beschriebene scheint hier noch nicht enthalten zu sein.
dann noch ein tipp. benenne nicht in der tabelle die felder gleich. nimm immer noch einen prefix davor. anderenfalls kannst du z.b. nicht mehr mit USING beim JOIN arbeiten, sondern musst ON verwenden und die die felder BEIDER tabellen angeben.INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |
Kommentar
-
die verknüpfungstabellen sollten noch mit einem kombiniertem UNIQUE ausgestattet werden. schliesslich kann der gleiche user nur einmal den gegenstand haben...
Code:CREATE TABLE spells_attributes ( spellid int(11) NOT NULL default '0', attriid int(11) NOT NULL default '0', UNIQUE KEY spellid_attriid (spellid,attriid), KEY spellid (spellid), KEY attriid (attriid) );
und was du auch noch nicht gemacht hast, sind die namen der id-felder mindestens zu ändern.INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |
Kommentar
-
Original geschrieben von Abraxax
und was du auch noch nicht gemacht hast, sind die namen der id-felder mindestens zu ändern.
Kommentar
-
Wie ist das gemeint? Dass in den Verknüpfungstabellen andere Namen für die ids stehen sollten?
Und wie kann ich die Doppel-Unique-Verknüpfung in phpMyAdmin machen?
aber du kannst meine o.g. CREATE-anweisung nehmen und die namen anpassen. das kannst du dann auch bequem im phpmyadmin auf der karte SQL einfügen und ausführen lassen.INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |
Kommentar
-
Ok, ich habe mal die Namen geändert. Aber ich bin mir gar nicht mehr sicher, ob die User nicht doch mehrere gleiche Gegenstände haben können. Würde das Performance mässig einen grossen Unterschied machen?
Wegen phpMyAdmin: Ich weiss natürlich, wie man SQL Befehle direkt ausführen kann, aber ich bin evtl. nicht der Einzige, der dann diese Datenbank verwalten wird. Daher müssen alle Vorgänge so simpel wie möglich gehalten werden.
Kommentar
-
Original geschrieben von zagibu
Aber ich bin mir gar nicht mehr sicher, ob die User nicht doch mehrere gleiche Gegenstände haben können. Würde das Performance mässig einen grossen Unterschied machen?
aber warum fügst du nicht einfach eine weitere spalte für die anzahl an?
user-id, gegenstand-id und anzahl.
wenn user x einen weiteren gegenstand y bekommt, siehst du zunächst nach, ob schon ein datensatz mit user-id x und gegenstand-id y existiert - wenn ja, erhöhst du dort die anzahl um eins, wenn nein, legst du diesen datensatz neu an, mit der anzahl 1.I don't believe in rebirth. Actually, I never did in my whole lives.
Kommentar
-
Okok, kann mir mal jemand sagen, was daran falsch ist:
Code://set up the spell query $query = "SELECT * FROM wizardspells WHERE ws_wizard_id='$wizard_id'"; //run the query $result = mysql_query($query, $connection) or die('error making spell query'); //now make the JOIN to get the spells $join = "SELECT * FROM $result LEFT JOIN spells ON ws_spell_id = spell_id"; //run the query $spells = mysql_query($join, $connection) or die('error making spell join');
Kommentar
Kommentar