$+$*$= met database

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Elian degroot

elian degroot

18/01/2014 10:23:26
Quote Anchor link
Dag,
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
 
PHP hulp

PHP hulp

28/12/2024 10:06:28
 
- Ariën  -
Beheerder

- Ariën -

18/01/2014 10:26:25
Quote Anchor link
Als je tabellen of velden gaat nummeren, dan klopt je database-structuur ergens niet.
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 -
 
Ivo P

Ivo P

18/01/2014 10:55:57
Quote Anchor link
INT voor gehele getallen

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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/01/2014 11:32:37
Quote Anchor link
Hoezo moet je dat niet apart opslaan.
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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
SELECT
plaats1 + plaats2 AS totaal_aantal,
(plaats1 + plaats2) * prijs AS totaal_prijs
FROM tabelnaam

Vooropgesteld dat je dan het juiste datatype gebruikt.
 
Ivo P

Ivo P

18/01/2014 12:10:20
Quote Anchor link
Als de berekening complex of groot wordt (te traag) dan kun je het inderdaad gaan cachen: apart bijhouden.

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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/01/2014 13:35:43
Quote Anchor link
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.
 
Elian degroot

elian degroot

18/01/2014 15:51:59
Quote Anchor link
mooi,

Ik heb de dbase aangepast en is nu zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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 ;

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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/01/2014 16:23:17
Quote Anchor link
Een decimal declareer je normaal gesproken met DECIMAL(digits, decimals).
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.
 
Ivo P

Ivo P

18/01/2014 16:37:10
Quote Anchor link
zoals ik je tabel nu lees:
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT totaal, totprijs FROM tabel

werkt inderdaad, maar is maar een kleine fractie sneller dan

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
SELECT plaats1+plaats2 as totaal,
(plaats1+plaats2)*prijs as totprijs
FROM tabel


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.
 
Elian degroot

elian degroot

18/01/2014 16:50:02
Quote Anchor link
@Ivo P

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
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

18/01/2014 17:31:04
Quote Anchor link
>> als ik soms nog vragen heb zal ik deze hier nog vragen als het mag of kan.
Een forum waarop je geen vragen kan of mag stellen heeft geen recht van bestaan ;-)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.