Een sessie winkelwagen in DB gooien
Ik heb een sessie winkelwagen, daarin staan 3 producten!
Nu pak ik deze sessie uit met foreach()
Nou wil ik deze drie producten die nu uit de sessie worden getoond
met een INSERT INTO query in een tabel in de phpmyadmin database stoppen
Maarrr, hij maakt nu gewoon 3 nieuwe rijen aan in de tabel orders met dus drie nieuwe
order_id, maar hij moet gewoon 1 nieuwe rij aanmaken met in die rij die drie artikelen (artikel_id)
Zoekend naar een oplossing...
Zo ja: zucht
Zo nee: Wat bedoel je dan?
Ja dat bedoel ik ja, maar dat staat er ook wel duidelijk ;)
Je krijgt dan bijvoorbeeld:
_______ _________ _________
row_id ][order_id ][artikel_id ]
1 ][500 ][450 ]
2 ][500 ][634 ]
3 ][500 ][913 ]
--------------------------------------
Snap je wat ik bedoel? Dit is een veel nettere oplossing, en wanneer iemand dan een rij wil verwijderen (lees: een product niet wil bestellen) is het mogelijk om die rij te verwijderen.
Tip: Normaliseren
Maar het moet er dan eigenlijk zo uit zien:
_______ _________ _________
row_id ][order_id ][artikel_id ]
1 ][500 ][450 ] [3, 4, 5]
2 ][500 ][634 ] [8, 3, 9]
3 ][500 ][913 ]
--------------------------------------
Dus dat een ORDER meer dan 1 bestelling opslaat...
bij mij ziet het er nu zo uit namelijk:
order_id klant_id boek_id
1 2 129
2 2 131
dus klant met id 2 heeft 2 boeken besteld, maar wordt dus onder elkaar in DB gezet... en die twee boek_id moeten dus samen komen te staan...
Johan, kijk nog eens naar mijn post, dat werkt veel beter en netter! Dan is het wel genormaliseerd., je maakt het jezelf alleen maar moeilijk met deze methode. Probeer het eens op "mijn" manier.
ZOals ik het begrijp wil je meerdere artikelen in een record opslaan.
Dat zie ik door:
row_id ][order_id ][artikel_id ]
1 ][500 ][450 ] [3, 4, 5]
2 ][500 ][634 ] [8, 3, 9]
3 ][500 ][913 ]
Je mist hierboven alleen een kolomnaam. Wat bedoel je met die [3, 4, 5]?
Je kan beter niet meerdere artikelen in 1 rij opslaan. Het levert dan wel minder rijen op, maar de tijd die je kwijt bent om de kolom te selecteren, te splitsen en te tellen is veel meer.
Je kan dit [3, 4, 5] namelijk niet direct tellen als 3 artikelen. Dan moet je met php de functie explode gaan gebruiken.
Je moet echt mysql gebruiken voor het ophalen van gegevens. Mysql is daarop gefocused en daarom vele malen sneller dan php.
Je krijgt dan dus nog maar 1 artikel per rij.
Ik weet wel waardoor het komt, dat die tabel nu zo raar lijkt, hij heeft de mijne gekopieerd en daarachter zijn artikel_id kolom (inhoud daarvan) gezet.
row_id ][order_id ][artikel_id ]
1 ][500 ][450 ]
2 ][500 ][634 ]
3 ][500 ][913 ]
4 ][501 ][457 ]
5 ][501 ][638 ]
6 ][501 ][919 ]
row_id ][order_id ][artikel_id ]
1 ] [500 ] [450 ]
2 ] [500 ] [634 ]
3 ] [500 ] [913 ]
--------------------------------------
Dit is misschien toch een nette oplossing... alleen is het dan niet zo dat je onnodig veel rijen krijgt?
Ben wat dat betreft nog wel beginneling, maar kan wel snel dingen oppakken...
row_id ][order_id ][artikel_id ][aantal ]
1 ][500 ][450 ][2]
2 ][500 ][634 ][3]
3 ][500 ][913 ][1]
4 ][501 ][457 ][6]
5 ][501 ][638 ][1]
6 ][501 ][919 ][3]
Mijn vorige oplossing was ook nog niet compleet, omdat ik eerst eens wilde dat hij de artikelen in één rij zet...
Maar aantal heb ik in php per artikel al klaar.
Maar ik zal eens met die tabel aan de slag, en hem opnieuw structueren, bedankt voor je tips.
Heb je nog wat tips m.b.t. een online bestelsysteem wat betreft factureren?
Klanten --> alle klantgegevens (adres, telnr, naam etc)
Producten --> alle productgegevens (naam, omschrijving, prijs etc.)
Orders --> Samengestelde orders (ordernr, artikelcode, aantal, verkoopprijs)
Waarom de prijs in de order tabel? Een prijs kan veranderen terwijl de order is geplaatst, je wilt dat klanten niet voor verassingen komen te staan wat prijzen betreft.
btw, ik stuit op klein probleempje
[row_id] [order_id] [klant_id] [boek_id] [aantal]
[8] [0] [2] [131] [2]
[7] [0] [2] [130] [3]
[6] [0] [2] [129] [1]
Ik moet dan denk ik even controleren waar de tabel is met de hoogte van Order_id? en daar +1 bij op tellen? of zou je het anders doen?
Gewijzigd op 01/01/1970 01:00:00 door Johan
De tabel waar alle order_id's uit komen, heeft een kolom order_id die autoincrement is (en dus ook uniek!). Dit nummer zet je dan ook in de tabel met de verschillende producten. En je gebruikt het om een verband te leggen met je klanten, etc. etc.
Je zou denk ik ff de hele topic moeten lezen om te kijken waar het over gaat ;)