Effiziente Implemetierung gesucht

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

  • #16
    wenn die db zuerst "joint" und dann "wheret"
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #17
      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


      • #18
        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


        • #19
          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


          • #20
            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


            • #21
              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
              Wie ihr seht, handelt es sich dabei um eine Art "Magic: The Gathering" Datenbank, welche die Spieler und ihre Kartensets verwaltet. Da bei den Spruchattributen eine unbekannte Anzahl von Parametern auftritt, muss man das wohl fast so lösen. Oder liege ich wieder mal völlig daneben?
              Zuletzt geändert von zagibu; 30.07.2003, 13:46.

              Kommentar


              • #22
                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


                • #23
                  Habe ich in der Aufregung ganz vergessen. Die geänderte Version sollte jetzt aber in Ordnung sein, hoffe ich doch. Was gibt es zu dem "parameterlist" Feld zu sagen? Könnte man das doch anders lösen?

                  Kommentar


                  • #24
                    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


                    • #25
                      Original geschrieben von Abraxax
                      und was du auch noch nicht gemacht hast, sind die namen der id-felder mindestens zu ändern.
                      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? Ohne die Kommandozeile zu benützen, meine ich.

                      Kommentar


                      • #26
                        Wie ist das gemeint? Dass in den Verknüpfungstabellen andere Namen für die ids stehen sollten?
                        nein. dass die idfelder in der verkn.tab den selben namen tragen, wie in deinen daten-tabs. ergo solltest du die felder in den dat.tabs ändern. das ist hinterher besser zu handeln...


                        Und wie kann ich die Doppel-Unique-Verknüpfung in phpMyAdmin machen?
                        geht auch irgendwie. frage mich jetzt nur nicht wie....

                        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


                        • #27
                          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


                          • #28
                            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?
                            so wie abraxax dir die tabelle vorgeschlagen hat, geht das gar nicht da die kombination spellid und attriid eindeutig sein muss. bei nur diesen zwei spalten geht's aber auch nicht anders, da du sonst ja einen datensatz mit einer userid und der gegenstand-id zweimal in der tabelle hättest - das ist nicht möglich.

                            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


                            • #29
                              Gute Idee, danke. So werd ich's machen. Was ich aber nun nicht ganz verstehe, ist der Sinn seiner Doppel-Unique-Verknüpfung, wenn ja doch nicht doppelte Sätze vorkommen können...

                              Kommentar


                              • #30
                                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');
                                Er gibt mir nämlich immer 'error making spell join' aus.

                                Kommentar

                                Lädt...
                                X