Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[MySQL] Prijs product op een bepaald moment

Pagina: 1
Acties:

  • xiD
  • Registratie: Oktober 2003
  • Laatst online: 17:04
Ik wil, zoals de titel al zegt, in één query de prijs van een product op het moment dat een order gemaakt is bepalen.

code:
1
2
3
4
5
6
7
8
9
10
order_product (table met producten in een order)
- order_id (relatie met order)
- product_id (relatie met product)
- amount 
- timestamp (tijd van toevoegen)

product_price (table prijzen van een product)
- product_id (relatie met product)
- price 
- timestamp (tijd van toevoegen prijs)


Nu heb ik de volgende query om de prijs van een product op te halen op een bepaald moment:
code:
1
SELECT * FROM product_price WHERE timestamp <= '$timestamp' AND product_id = 1 ORDER BY timestamp DESC LIMIT 1


Maar ik heb geen idee hoe ik alle producten uit een order kan halen met de juiste prijs erbij. Met meerdere querys krijg ik het uiteindelijk wel voor elkaar maar ik denk dat het in 1 ook zou moeten gaan.

Iemand die mij opweg kan helpen?

67890


Verwijderd

Bekijk de documentatie bij mysql over joins (ik denk dat je mysql gebruikt?)

  • T-MOB
  • Registratie: Maart 2001
  • Laatst online: 16:21
Als je dit systeem aan het opzetten bent zou ik je adviseren om de prijs bij de order op te slaan. Dan heb je _altijd_ correcte prijsgegevens bij je order.

Regeren is vooruitschuiven


  • xiD
  • Registratie: Oktober 2003
  • Laatst online: 17:04
Ik ga me is inlezen in joins, vaker tegen gekomen maar nooit echt nodig gehad.
T-MOB schreef op maandag 07 april 2008 @ 13:55:
Als je dit systeem aan het opzetten bent zou ik je adviseren om de prijs bij de order op te slaan. Dan heb je _altijd_ correcte prijsgegevens bij je order.
Daar heb ik ook over nagedacht maar het voordeel van deze manier is dat ik een net overzicht van de prijshistory heb. En als ik dat ook de prijs per order ga opslaan (wat andere voordelen heeft) sla ik de prijs 2x op en dat vind ik overbodig.

67890


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Dan geef je product_price een auto increment kolom als primary key en sla je dat id op bij de orders. :)

{signature}


  • xiD
  • Registratie: Oktober 2003
  • Laatst online: 17:04
Dat is inderdaad een optie maar dan leg ik toch een overbodige relatie?

67890


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
De prijs van een product op het moment het plaatsen van een order is géén productprijs, maar een 'orderregelprijs'. En dus hoort 'ie bij de orderregel opgeslagen te worden. Simple as that. Dan blijven alle normalisatie regeltjes van toepassing en heb je geen overbodige relaties o.i.d. nodig.

[ Voor 24% gewijzigd door RobIII op 07-04-2008 14:19 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
xiD schreef op maandag 07 april 2008 @ 14:16:
Dat is inderdaad een optie maar dan leg ik toch een overbodige relatie?
Nee, want dan hoeft product_id niet meer bij de order. Maar goed, ik ben het ook volledig eens met wat RobIII zegt.

De optie die ik noemde is een beetje een poldermodel, en die werkt enkel op de aanname dat je nooit updates op de product_price tabel hebt (en nog wat stomme regels), want anders gaat er heel veel fout qua facturen en afspraken richting de klant toe.

{signature}


  • kenneth
  • Registratie: September 2001
  • Niet online

kenneth

achter de duinen

xiD schreef op maandag 07 april 2008 @ 14:16:
Dat is inderdaad een optie maar dan leg ik toch een overbodige relatie?
Je wilt iets bereiken, maar alles dat daarbij helpt noem je 'overbodig' :) Er zit altijd een vorm van redundantie in, ook al is het gewenste redundantie.

Plus wat RobIII zegt, dat is gewoon de gangbare manier.

Look, runners deal in discomfort. After you get past a certain point, that’s all there really is. There is no finesse here.


Verwijderd

Ik zou het ook gewoon opslaan bij de order. Want wat als je korting op een bepaalde order wilt toepassen, verandert toch echt alleen die ene orderregel op die ene order (daar ga je niet een apart product voor aanmaken lijkt me).

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

xiD schreef op maandag 07 april 2008 @ 14:02:
Ik ga me is inlezen in joins, vaker tegen gekomen maar nooit echt nodig gehad.
....hoe kun je in godesnaam met relationele databases leren werken zonder joins te gebruiken? :?

edit:
meh ignore second part

[ Voor 64% gewijzigd door curry684 op 08-04-2008 03:24 ]

Professionele website nodig?


  • xiD
  • Registratie: Oktober 2003
  • Laatst online: 17:04
RobIII schreef op maandag 07 april 2008 @ 14:18:
De prijs van een product op het moment het plaatsen van een order is géén productprijs, maar een 'orderregelprijs'. En dus hoort 'ie bij de orderregel opgeslagen te worden. Simple as that. Dan blijven alle normalisatie regeltjes van toepassing en heb je geen overbodige relaties o.i.d. nodig.
Heb het inderdaad op deze manier gedaan, ook heb ik de prijshistory bij het product aangehouden wat toch wel gewenst is.
curry684 schreef op dinsdag 08 april 2008 @ 03:23:
[...]

....hoe kun je in godesnaam met relationele databases leren werken zonder joins te gebruiken? :?

edit:
meh ignore second part
Wel in de vorm van "table1 t1, table2 t2 WHERE t1.a = t2.b", maar het woord 'JOIN' heb ik nog nooit hoeven typen :+

[ Voor 26% gewijzigd door xiD op 09-04-2008 12:28 ]

67890


  • Voutloos
  • Registratie: Januari 2002
  • Niet online
Joinen met de ',' operator is pure armoede. Geef gewoon netjes expliciet aan wat voor join het is en zet de join condities in een ON of USING clause.

{signature}

Pagina: 1