$+$*$= met database
Ik heb een vraag.
Er zijn 4 tabellen in de database: plaats1, plaats2, prijs en totaal.
ik zou graag willen weten als er in plaats1 een product bijkomt hoe ik dit kan samen tellen bij totaal.
Dan wil ik ook graag weten hoe ik het totaal kan vermenigvuldigen met : totaal en prijs.
dit alles moet dan weer in de database gebracht worden.
Ikzelf heb nog niets van idee, en zou erg graag hulp krijgen.
Kan mij iemand op weg helpen?
ook dit nog, de tabellen zijn allen in varchar gemaakt.
Met dank
Lees ook eens: http://www.yapf.net/index.php/Database_ontwerp_101
Verder kan je ook niet rekenen met VARCHAR, dus gebruik bij voorkeur INT als datatype.
Gewijzigd op 18/01/2014 10:27:21 door - Ariën -
decimal voor bedragen of andere gebroken getallen
bijvoorbeeld voor eur 4.95 of 2.3 km voor een afstand
---
als je kunt tellen hoeveel artikelen er in je magazijn liggen, dan moet je dat niet apart opslaan.
Dat geeft een risico op verschillen. Bijvoorbeeld omdat 1 routine (van de 3 die je hebt) 'vergeet' om de totaal berekening aan te passen, met onverklaarbare verschillen tot gevolg
Dat heeft bij mij ver de voorkeur boven alle inkopen en verkopen tegenover elkaar te zetten.
Risico's kan je uitsluiten.
Toevoeging op 18/01/2014 12:02:45:
>> Er zijn 4 tabellen in de database: plaats1, plaats2, prijs en totaal.
Heb je het over tabellen in de database, of over kolommen in een tabel?
Als het kolommen zijn heb je het totaal niet nodig want dat kan je afleiden uit plaats1 + plaats2
Zo ook de totaal prijs:
Code (php)
1
2
3
4
2
3
4
SELECT
plaats1 + plaats2 AS totaal_aantal,
(plaats1 + plaats2) * prijs AS totaal_prijs
FROM tabelnaam
plaats1 + plaats2 AS totaal_aantal,
(plaats1 + plaats2) * prijs AS totaal_prijs
FROM tabelnaam
Vooropgesteld dat je dan het juiste datatype gebruikt.
Maar op voorhand al "aantal * prijs" over het totaal direct te herbereken gaat mi. al direct de verkeerde kant op.
Of je moet het met triggers oplossen, of heel zeker weten dat je steeds alles aanpast. want nu luidt de vraag "als er eentje bijkomt", maar ik mis al de optie "als de prijs verandert"
En dat geldt ook voor de situatie dat je buiten php om (andere applictie of direct in de database) iets verandert.
En in php dan moet het ook niet zo zijn dat je dan "er is er 1 van 2 euro bijgekomen, dus de totaalwaarde = totaalwaarde + 2" redeneert, maar alles herberekent
Ik had het ook niet over totalen je die berekent op basis van kolommen uit dezelfde tabel, maar over totalen die berekent worden op basis van gegevens uit andere tabellen.
Ik heb de dbase aangepast en is nu zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
CREATE TABLE IF NOT EXISTS `magazijn` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`naam` varchar(50) NOT NULL,
`verpakking` varchar(30) NOT NULL,
`hoeveelheid` varchar(20) NOT NULL,
`plaats1` int(5) NOT NULL,
`plaats2` int(5) NOT NULL,
`totaal` int(20) NOT NULL,
`prijs` decimal(20) NOT NULL,
`totprijs` decimal(20) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ;
`id` int(11) NOT NULL AUTO_INCREMENT,
`naam` varchar(50) NOT NULL,
`verpakking` varchar(30) NOT NULL,
`hoeveelheid` varchar(20) NOT NULL,
`plaats1` int(5) NOT NULL,
`plaats2` int(5) NOT NULL,
`totaal` int(20) NOT NULL,
`prijs` decimal(20) NOT NULL,
`totprijs` decimal(20) NOT NULL,
UNIQUE KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=18 ;
Wat prijsverandering aangaat, daar moet ik geen rekening mee houden ,
Het is enkel een richtlijn voor het magazijntje voor een club
ze willen een overzicht wat ze hebben en ook ongeveer het geld die er insteekt.
Ik vind het zelf een uitdaging om eens te zien wat en hoever ik sta met php op mijn oude dag en is ook om mijn tijd wat nuttig te proberen te besteden.
Ik ben al tevreden met de tips die ik hier heb en zal nu eens zelf uit zoeken met wat ik weet en kan.
Mogelijk heb ik dan nog wel wat hulp nodig.
Met dank
Gewijzigd op 18/01/2014 15:52:47 door elian degroot
Tenzij je artikelen in je magazijn hebt die een miljoen of meer kosten kan je volstaan met DECIMAL(8,2).
Nogmaals, die kolommen met totalen zijn overbodig als je die waarde kan berekenen uit andere kolommen in de tabel.
in een zekere regel in de tabel staat dat je hebt:
naam : "suiker",
verpakking :"zak",
hoeveelheid: "kg"
plaats1 (de voorraadkast) : 3
plaats2 (de kantine) : 1
totaal: 4 (zijnde 3+1)
prijs: 1.95 (prijs per kg)
totprijs: 7.80 (zijnde 4*1.95)
en dat zou dus inderdaad niet op die manier opslaan:
werkt inderdaad, maar is maar een kleine fractie sneller dan
En het enorme voordeel is hier mi. dat je nooit verschillen hebt tussen plaats1+plaats2 en totaal.
Als iemand ooit rechtstreeks iets aanpast, zonder dat jij de vervolgquery: "update totaal en totprijs" uitvoert, dan heb je foute data.
En die paar miliseconden die bij het rekenen zoals ik dat voorsta, verloren gaan, die merk je echt niet op. In elk geval niet als je niet 10-duizenden producten op voorraad hebt.
Het is inderdaad zoals je aangeeft wat ik wil.
Meer dan 100 producten komen er zeker niet alsook is er maar 1 persoon die de veranderingen kan ingeven
via een beveiligd script.
Ik kan nu aan de slag en bedankt voor de tips aan iedereen.
als ik soms nog vragen heb zal ik deze hier nog vragen als het mag of kan.
Gewijzigd op 18/01/2014 16:51:19 door elian degroot
Een forum waarop je geen vragen kan of mag stellen heeft geen recht van bestaan ;-)