Nieuwe kolom, maar hoe?
Sinds kort ben ik bezig met het maken van een kleine online game. Nu wou ik zonet een scriptje maken zodat je als admin zijnde zelf wapens kan toevoegen.
Ik heb een tabel in me database gezet met alle wapens erin.(table wapens)
Nu heb ik ook een table waarin alle gebruikers staan(table user).
Ik wil nu dat er voor elke gebruiker een rij wordt aangemaakt(als ze zich registreren, en dat er dan per gebruiker staat aangegeven hoeveel van elk wapen hij bezit.(denk aan de oude criminals:P)(Dit gaat overigens nog gewoon goed hoor...:P)
Nu wil ik dus een script maken dat ik een nieuw wapen kan toevoegen, dit is makkelijk te plaatsen in de table wapens met INSERT INTO, maar ik weet alleen niet hoe ik nu voor iedere al geregistreerde gebruiker dat extra veld kan toevoegen en voor alle komende gebruikers, er moet dus in de table user een nieuwe kolom bijkomen.
Als het zou kunnen wil ik dan ook gelijk bij iedere al geregistreerde gebruiker dat nieuwe veld de waarde 0 meegeven.
Heeft iemand een idee hoe ik die kolom in de table user kan toevoegen + die waarde 0?
Ik hoop op een reactie, want ik ben echt radeloos :(
Groetjes,
Dennuzzz
Gewijzigd op 01/01/1970 01:00:00 door Dennis
Waarom heb je bij een nieuw wapen een nieuwe kolom nodig? Wanneer dat het geval is, dan zit er iets goed fout in jouw datamodel. Of maak je ook een nieuwe kolom aan wanneer er een nieuwe user moet worden opgeslagen? Lijkt me niet.
Het is dus beter om hiervoor een aparte tabel te pakken die hier een geweer representeerd. Deze verwijst met foreign keys naar een speler, en een geweer type. Verder kun je dingen zoals staat nog bij doen, wees creatief.
Misschien is het ook handig om wat te lezen over normaliseren van databases, er is geloof ik op het phphulp website een mooie tutorial voor.
Edit:
Linkie: Normaliseren
Gewijzigd op 01/01/1970 01:00:00 door Riemer
pgFrank schreef op 23.06.2008 22:12:
Waarom heb je bij een nieuw wapen een nieuwe kolom nodig? Wanneer dat het geval is, dan zit er iets goed fout in jouw datamodel. Of maak je ook een nieuwe kolom aan wanneer er een nieuwe user moet worden opgeslagen? Lijkt me niet.
Ja een nieuwe kolom in de table user
Het zit zo, een speler heeft nu keuze uit 10 wapens. Die voor elke van zijn ventjes gekocht mag worden.
Er staat nu 10 record voor iedere gebruiker met daarin de hoeveelheid al gekochte wapens van elke soort.
Maar als ik dus een nieuw wapen erbij wil dan moet er dus per gebruiker een extra record komen.
Riemer schreef op 23.06.2008 22:12:
Dus als ik het goed begrijp kan een speler meerdere geweren hebben? en aangezien meerdere spelers één type geweer kan hebben is er dan dus sprake van een meer op meer relatie.
Het is dus beter om hiervoor een aparte tabel te pakken die hier een geweer representeerd. Deze verwijst met foreign keys naar een speler, en een geweer type. Verder kun je dingen zoals staat nog bij doen, wees creatief.
Misschien is het ook handig om wat te lezen over normaliseren van databases, er is geloof ik op het phphulp website een mooie tutorial voor.
Edit:
Linkie: Normaliseren
Het is dus beter om hiervoor een aparte tabel te pakken die hier een geweer representeerd. Deze verwijst met foreign keys naar een speler, en een geweer type. Verder kun je dingen zoals staat nog bij doen, wees creatief.
Misschien is het ook handig om wat te lezen over normaliseren van databases, er is geloof ik op het phphulp website een mooie tutorial voor.
Edit:
Linkie: Normaliseren
1 gebruiker kan meerdere kliks krijgen, voor elke klik kan er van ieder wapen 1 extra worden gekocht.
10 kliks dan mag er van ieder wapen 10 keer een exemplaar worden verkocht. Krijg je een klik erbij, dan mag je als speler zijnde van elk wapen 11 exemplaren kopen.
Dennis schreef op 23.06.2008 22:22:
En dat is dus precies wat je niet nodig hebt... Een nieuw wapen, dat is een nieuw record in de tabel met wapens. Daar heb je nooit en te nimmer een nieuwe kolom voor nodig in welke tabel dan ook. Een wapen staat in de tabel wapens, of deze nu A of B heet, dat doet niet ter zake. Een wapen is een wapen en alle gegevens van dezelfde soort staan in dezelfde kolom. Dus de naam van het wapen staat in de kolom "naam" etc. etc. etc.Ja een nieuwe kolom in de table user
Ga normaliseren en voorkom grotere problemen.
Ik ga er nu mee beginnen.
Bedankt.
pgFrank schreef op 23.06.2008 22:29:
Dennis schreef op 23.06.2008 22:22:
En dat is dus precies wat je niet nodig hebt... Een nieuw wapen, dat is een nieuw record in de tabel met wapens. Daar heb je nooit en te nimmer een nieuwe kolom voor nodig in welke tabel dan ook. Ja een nieuwe kolom in de table user
Maar Frank er moet toch per user worden opgeslagen hoeveel van elk wapen de user heeft. In de table wapens staan alleen de wapens die een user kan kopen.
Vriend van me kwam online en zei dat ik ALTER TABLE `user` ADD `wapen_naam` INT( 5 ) NOT NULL DEFAULT '0';
Moet gebruiken, maar toch bedankt voor die link over die normalisatie.
Ik heb er in ieder geval iets van geleerd :)
Bumpen::
SanThe.
Dennis ik zou toch maar gaan voor die normalisatie van je database, anders kom je bij latere uitbreiding nog in de nesten te zitten. Het is misschien even werk, maar als je later nog iets wilt aanpassen, zie je door het bos de bomen niet meer.
Gebruik gewoon een apart tabel, dit geeft het meest flexibiliteit, de aantal wapens kun je simpel weg tellen door de records te tellen (vergeet niet, records = rijen in een tabel). Ik denk dus dat je 3 tabellen nodig hebt, 1 voor gebruiker 1 voor wapentype (plaatje, basis stats), en 1 voor de wapen zichzelf die van een gebruiker is en een bepaalde wapentype is.
Moet je zien, een extra kolom werkt natuurlijk. maar wat als je uit gaat breiden naar 100 wapen types? ik noem maar wat, dan krijgt elk gebruiker 100 kolommen alleen voor wapens, beetje krankzinnig te noemen niet? Een aparte tabel die een wapen representeert is stukken beter, geeft je verder ook veel meer flexibiliteit eigenlijk in beide uitbreiding mogelijkheden en mogelijkheden in gameplay (staat van wapen, extra bonussen per wapen ik noem maar wat).
Gewijzigd op 01/01/1970 01:00:00 door Riemer
Riemer schreef op 24.06.2008 07:45:
Breng die vriend hier maar even naar toe, mag hij haarfijn uitleggen of dit wel een correct database model is.
Gebruik gewoon een apart tabel, dit geeft het meest flexibiliteit, de aantal wapens kun je simpel weg tellen door de records te tellen (vergeet niet, records = rijen in een tabel). Ik denk dus dat je 3 tabellen nodig hebt, 1 voor gebruiker 1 voor wapentype (plaatje, basis stats), en 1 voor de wapen zichzelf die van een gebruiker is en een bepaalde wapentype is.
Moet je zien, een extra kolom werkt natuurlijk. maar wat als je uit gaat breiden naar 100 wapen types? ik noem maar wat, dan krijgt elk gebruiker 100 kolommen alleen voor wapens, beetje krankzinnig te noemen niet? Een aparte tabel die een wapen representeert is stukken beter, geeft je verder ook veel meer flexibiliteit eigenlijk in beide uitbreiding mogelijkheden en mogelijkheden in gameplay (staat van wapen, extra bonussen per wapen ik noem maar wat).
Gebruik gewoon een apart tabel, dit geeft het meest flexibiliteit, de aantal wapens kun je simpel weg tellen door de records te tellen (vergeet niet, records = rijen in een tabel). Ik denk dus dat je 3 tabellen nodig hebt, 1 voor gebruiker 1 voor wapentype (plaatje, basis stats), en 1 voor de wapen zichzelf die van een gebruiker is en een bepaalde wapentype is.
Moet je zien, een extra kolom werkt natuurlijk. maar wat als je uit gaat breiden naar 100 wapen types? ik noem maar wat, dan krijgt elk gebruiker 100 kolommen alleen voor wapens, beetje krankzinnig te noemen niet? Een aparte tabel die een wapen representeert is stukken beter, geeft je verder ook veel meer flexibiliteit eigenlijk in beide uitbreiding mogelijkheden en mogelijkheden in gameplay (staat van wapen, extra bonussen per wapen ik noem maar wat).
ok jij stelt dus voor dat alle wapens in een nieuwe tabel komen, die dan gekoppeld staat met bijvoorbeeld het user_id aan iedere gebruiker?
Dus dan zullen er uiteindelijk evenveel records in de wapen_user tabel zitten als in de user tabel?
Daarnaast inderdaad zoals ik die al had een tabel wapen waarin de stats staan inderdaad ;)
Ok, ook goed. Die wijziging is niet zo moeilijk :)
PS: Doe niet zo naar over die vriend, hij probeerde mij alleen maar te helpen. Ik zat in nood :P
Quote:
ok jij stelt dus voor dat alle wapens in een nieuwe tabel komen, die dan gekoppeld staat met bijvoorbeeld het user_id aan iedere gebruiker?
Ik zal het even kort vertellen, ik dus voorstel is het gebruik van 3 tabellen:
- User tabel
- gunType tabel
- gun
de guns tabel verwijst dan beide met foreign keys (dus ID's van records in een ander tabel) naar een gebruiker en een gunType record.
Ik begrijp helaas wat weinig van je text, en kan er amper uithalen of je het begrijpt of niet (maar ik heb mijn kop koffie ook niet op) dus daarom vertel ik het nog maar een keer.
Quote:
Dus dan zullen er uiteindelijk evenveel records in de wapen_user tabel zitten als in de user tabel?
Als elk gebruiker maar 1 wapen heeft, wel ja. Moet je zien, elk record in tabel guns representeerd maar 1 wapen. Heeft een gebruiker meerdere guns, zijn er meer records in die tabel die verwijzen naar die gebruiker.
Edit: Zie dit overigens ook niet als een persoonlijke aanval. We willen graag helpen, maar hier (en veel andere forums met een hoge graad van expertise) komt er vaak ongevraagde advies bij.
Gewijzigd op 01/01/1970 01:00:00 door Riemer
Maar het zit een beetje anders in elkaar, want een gebruiker kan ook meerdere van dezelfde guns hebben ;)
Maar ik heb nu een oplossing. 3 tabellen. Klaar uit :D
1 voor users.
1 voor wapenstats.
1 voor hoeveelheid wapens per user ;)
Gewijzigd op 01/01/1970 01:00:00 door Riemer