account systeem met meerdere tabellen
Nu zou ik echter graag willen weten hoe ik een systeem op kan zetten in mysql, wat een beetje lijkt op wiebetaalwat.nl
Hierbij krijg je als je inlogd alle lijsten te zien waarop je deelneemt, welke je vervolgens kunt openen.
wat ik kan bedenken is dit:
een table met de users (wat ik nu heb), vervolgens een kolom waarop in array vorm alle tabelen lijsten staan, deze uitlezen met php en daarmee een nieuwe sql statement maken.
Is er een betere mannier?
Als je data met elkaar wilt koppelen, kijk dan vooral eens naar 'database normalisatie'. Er gaat dan een wereld voor je open.
wat ik nu heb bedacht is inderdaad iets met normalisatie maar naar mijn idee toch te groot, voorbeeld:
3+ tabellen
A. de userlist
user, naam ,enz
1 , bob ,...
2 , hans ,...
B. de koppellijst
lijst, naam,
lijst1, bob,
lijst1, hans,
lijst2 bob,
C. de lijsten zelf
en deze vervolgens via een veel te lastige (uitdaging!), sql statemtent opvragen.
wat je hiermee krijgt is dat voor elke lijst en user koppeling een nieuwe rij aangemaakt moet worden, kan dit beter?
maar dan:
je hebt in deze situatie vier tabellen nodig
1. users-> met de velden: user_id, name, etc.
2. lists-> met de velden: list_id, user_id, listname
3. listrules-> met de velden: rule_id, list_id, user_id, listname, description, date, price
4. ruleusers-> met de velden: rule_id, user_id. (dit is een koppeltabel)
de vet onderstreepte zijn primary keys met auto increment
Gewijzigd op 27/03/2013 00:04:46 door Frank Nietbelangrijk
Als je dan koppeltabellen gebruikt, wees dan consequent en gebruik er ook een voor de tabellen listrules en lists
Gewijzigd op 27/03/2013 10:07:27 door Bernhard Flokstra
ik heb 2 standaard tabellen
1 met rijen met users [name, user_id, password]
1 met een kolom [date, list 1, list 2, list n], deze tabel bevat voor elke dag, een waarde voor 1 t/m n
vervolgens heb ik dit gemaakt:
een tabel waarbij 3 dingen worden genoteerd, [user_id,group,list n] oftewel hierin staat dat user:hans in group:kantoor de kolom: list n representeerd. (je kan maar een list n zijn /per groep)
nu zou ik graag met 1 sql statments de group: kantoor willen laten zien, waarbij [date, list 1 en list 4] wordt weergeven welke overkomen met hans en peter.
is er een goede tutorial hiervoor?
A
{id, naam, pass}
[ 1, hans, 1234]
[ 2, jan, 4321]
B
{ date, 1, 2, 3}
[14-01, kaas, boter, appel]
[15-01, worst, melk, brood]
c
{ group, naam, waarde}
[kantoor, hans, 1]
[ thuis, hans, 2]
[kantoor, jan, 3]
uitkomst c.group=kantoor
{ date, hans, jan}
[14-01, kaas, appel]
[15-01, worst, brood]
Gewijzigd op 27/03/2013 19:16:00 door lul hannes
Ook kolommen nummers gaan geven (1 t/m n) is niet aan te bevelen. Of je hebt continu halflege tabellen, of je krijgt later het probleem dat je een extra kolom nodig hebt en dus je database structuur moet gaan aanpassen.
zoals erwin al zegt, geen kolommen list1 list2 etc gaan gebruiken. dat wordt dan een aparte tabel.
Erwin H op 27/03/2013 19:16:31:
Ik begrijp er eerlijk gezegd weinig van.... maar wat je in elk geval NIET moet doen, is arrays als arrays opslaan in een database. Op die manier kan je helemaal niets meer met de data in sql en zal je altijd lopen te klooien als je gegevens op wilt halen.
Ook kolommen nummers gaan geven (1 t/m n) is niet aan te bevelen. Of je hebt continu halflege tabellen, of je krijgt later het probleem dat je een extra kolom nodig hebt en dus je database structuur moet gaan aanpassen.
Ook kolommen nummers gaan geven (1 t/m n) is niet aan te bevelen. Of je hebt continu halflege tabellen, of je krijgt later het probleem dat je een extra kolom nodig hebt en dus je database structuur moet gaan aanpassen.
betreft de array
ik begrijp inderdaad hoe dat nu moet
betreft de kolommmen nummer
het is de keuze om elke dag een nieuwe kolom toe te voegen of dat te doen met elke nieuwe user in een group
door elke dag een nieuwe rij te geven is het makkelijk om een aantal dagen te selecter en de user op te sommen
Frank Nietbelangrijk op 27/03/2013 19:24:53:
begin gewoon simpel. maak de eerste twee tabellen uit mijn eerste post en probeer door middel van een join deze twee tabellen te koppelen.
een aardige tutorial:
http://www.phptuts.nl/view/41/
een aardige tutorial:
http://www.phptuts.nl/view/41/
dat "simpele" is wel gelukt het gaat om de stap om van de verkregen list id's de (nog niet) bijhorende kolom te laten zijn
@bernard: voor many to many relations heb je een koppeltabel nodig. voor one to many niet. Het heeft dus niets te maken met consequent zijn.
H de Rij op 27/03/2013 19:23:37:
betreft de kolommmen nummer
het is de keuze om elke dag een nieuwe kolom toe te voegen of dat te doen met elke nieuwe user in een group
door elke dag een nieuwe rij te geven is het makkelijk om een aantal dagen te selecter en de user op te sommen
het is de keuze om elke dag een nieuwe kolom toe te voegen of dat te doen met elke nieuwe user in een group
door elke dag een nieuwe rij te geven is het makkelijk om een aantal dagen te selecter en de user op te sommen
Haal je nu rijen en kolommen door elkaar? Elke dag een nieuwe kolom toevoegen is natuurlijk echt uit den boze.
Ik denk werkelijk dat je nog eens heel goed naar je model moet gaan kijken, want ik heb nu het idee dat het niet klopt wat je aan het proberen bent.
Gewijzigd op 28/03/2013 12:44:54 door Erwin H
H de Rij op 27/03/2013 19:29:05:
dat "simpele" is wel gelukt het gaat om de stap om van de verkregen list id's de (nog niet) bijhorende kolom te laten zijn
Toevoeging op 27/03/2013 19:41:04:
ook nu weer direct met erwin eens. kolommen maak je eenmalig. records (regels) worden dagelijks of nog vaker toegevoegd en of gewijzigd.
Gewijzigd op 27/03/2013 19:39:24 door Frank Nietbelangrijk
Erwin H op 27/03/2013 19:32:41:
Haal je nu rijen en kolommen door elkaar? Elke dag een nieuwe kolom toevoegen is natuurlijk echt uit den boze.
Ik denk werkelijk dat je nog eens heel goed naar je model moet gaan kijken, want ik heb nu het idee dat het klopt wat je niet aan het proberen bent.
H de Rij op 27/03/2013 19:23:37:
betreft de kolommmen nummer
het is de keuze om elke dag een nieuwe kolom toe te voegen of dat te doen met elke nieuwe user in een group
door elke dag een nieuwe rij te geven is het makkelijk om een aantal dagen te selecter en de user op te sommen
het is de keuze om elke dag een nieuwe kolom toe te voegen of dat te doen met elke nieuwe user in een group
door elke dag een nieuwe rij te geven is het makkelijk om een aantal dagen te selecter en de user op te sommen
Haal je nu rijen en kolommen door elkaar? Elke dag een nieuwe kolom toevoegen is natuurlijk echt uit den boze.
Ik denk werkelijk dat je nog eens heel goed naar je model moet gaan kijken, want ik heb nu het idee dat het klopt wat je niet aan het proberen bent.
ik zeg dat bij een nieuwe user een nieuwe kolom wordt gecreerd, en elke dag een nieuwe rij.
kijk maar gewoon even bij mijn voorbeeld, dit wil ik in de mysql database doen.
Toevoeging op 27/03/2013 19:51:34:
A
{id, naam, pass}
[ 1, hans, 1234]
[ 2, jan, 4321]
B
{ date, 1, 2, 3}
[14-01, kaas, boter, appel]
[15-01, worst, melk, brood]
c
{ group, naam, waarde}
[kantoor, hans, 1]
[ thuis, hans, 2]
[kantoor, jan, 3]
uitkomst c.group=kantoor
{ date, 1, 3}
[14-01, kaas, appel]
[15-01, worst, brood]
in 2 stappen (join met user weggelaten)
SELECT "waarde" from C WHERE group=kantoor
geeft [1,3]
Select "data",1,3 from B where 1
geeft vervolgens
[14-01, kaas, appel]
[15-01, worst, brood]
Dan blijf je echt verkeerd bezig. Kolommen maak je 1 keer aan, niet bij nieuwe gegevens. Zij het een nieuwe dag, zij het een nieuwe user, je kolommen moeten onveranderd blijven.
ik probeer een mogelijk account systeem te maken, ik ben groen hierin maar help mij op weg.Tot nu toe heb ik nagenoeg alleen negatieve kritiek gekregen terwijl ik graag info en hulp wil.
Brand mij niet af zonder met alternatieven te komen.
Om het dan hopelijk nog wat duidelijker te maken.
Een database is geen spreadsheet. Je kan niet zonder meer kolommen als rijen gebruiken en andersom. Eigenlijk moet je een database zien als een verzameling entiteiten (in jouw geval gebruikers, lijsten en mogelijk nog iets waar ik de vinger niet op krijg). Elke enititeit heeft bepaalde eigenschappen (een gebruiker heeft een naam en een id bijvoorbeeld), dat zijn de kolommen in je tabellen. Voor elke entiteit heb je meerdere exemplaren (meerdere gebruikers Jan, Piet, Henk, etc), dat zijn de rijen in je tabellen. Vervolgens kun je relaties tussen de verschillende entiteiten gaan leggen wat op verschillende manieren kan.
1-op-1 relatie: Zo'n relatie leg je door in twee tabellen eenzelfde key te gebruiken, meestal gebeurt dit op id. Heb je bijvoorbeeld een user_id in de gebruikerstabel, dan kan je in een andere tabel diezelfde waarde voor de user_id gebruiken zodat duidelijk is bij welke user de gegevens horen.
1-op-veel relatie: In feite hetzelfde als 1-op-1, alleen heb je nu in de tweede tabel meerdere rijen die verwijzen naar dezelfde gebruiker. De waarde voor de user_id komt dus in meerdere rijen in de tweede tabel terug.
veel-op-veel relatie: In dit geval heb je vele links heen en weer. Bijvoorbeeld een gebruiker kan meerdere lijsten hebben, maar een lijst kan ook naar meerder gebruikers verwijzen. Voor dit type relatie heb je een koppeltabel nodig, omdat voor elke relatie tussen gebruiker en lijst je dit apart moet opslaan. Zo'n koppel tabel kent over het algemeen maar twee kolommen, user_id en list_id in dit geval. Elke rij in die tabel legt een relatie tussen een gebruiker en een lijst.
Als we dit gaan toepassen op jouw model (zo ver als ik het begrijp), dan zie ik dus een entiteit gebruiker, een entiteit lijst en iets wat je 'groepen' noemt. Wat hier echter het idee achter is ontgaat mij. Veel verder dan dit kan ik dus op dit moment niet gaan, omdat je probleemstelling mij niet duidelijk is.
Dus, wil je echte alternatieven zal je duidelijker moeten maken wat je nu wilt. Wat is nu een 'lijst', wat is een 'groep', wat is de relatie tussen de gebruikers, lijsten en groepen? Kan een gebruiker meerdere lijsten hebben? Of kan een lijst bestaan uit meerdere gebruikers?
Gewijzigd op 28/03/2013 13:16:08 door lul hannes
Nee, dat is een duidelijk uitleg. Al mijn moeite dus echt voor niets geweest? Dank je wel... Fijn dit soort mensen...