Ik ben uit hobby een beetje aan het programmeren in php, nu heb ik daarbij een inlog systeem wat mooi funcioneert.
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?
ik bedoel de array opslaan als een mysqlstring "array(2,3)",
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
@frank: Als ruleusers een koppeltabel is tussen de tabellen users en listrules dan zie ik niet in waarom in listrules de kolom user_id moet voor komen. Deze staat immers ook al in de koppeltabel.
Als je dan koppeltabellen gebruikt, wees dan consequent en gebruik er ook een voor de tabellen listrules en lists
ik zal nu directer formuleren wat ik wil, aangezien ik er nog steeds niet uit kom.
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]
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.
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.
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