[mysql] join

Pagina: 1
Acties:

  • GieltjE
  • Registratie: December 2003
  • Laatst online: 18:06

GieltjE

Niks te zien...

Topicstarter
Ik heb al redelijk veel gedaan met mysql alleen nu moet ik een join maken met een speciaal probleem (joins heb ik ook nog nooit eerder gedaan).

Het probleem is als volgt, ik heb 2 tabellen;

tblProductPrices;
ID
ProductID
DateFrom
DateTo
Price
En nog wat andere niet belanrijke

Deze tabel staat in van waneer tot waneer een bepaalde prijs voor een product valt en waneer deze niet voorkomt moet het product ook niet weergegeven worden.
DateFrom en DateTo zijn in de "2007-2-6 00:00:00+01" vorm.

tblProducts
ProductID
ProductDescription
En nog wat andere niet belanrijke

In deze tabel staan alle producten met informatie etc.

Om het geheel moeilijk te maken moet ik een mysql_query hebben die uit tblProducts alleen rows weergeeft die in tblProductPrices een row heeft waarbij dat time() tussen datefrom en dateto licht.

De tabel die hij dan teruggeeft moet ook de prijs uit tblProductPrices bevatten, en mogelijkheid hebben om WHERE LIKE te gebruiken voor het zoeken.

Ik hoop dat dit enigsinds duidelijk is 8)7

Hell / 0


  • TheRookie
  • Registratie: December 2001
  • Niet online

TheRookie

Nu met R1200RT

Kort geleden nog iemand met in principe eenzelfde vraag: [SQL] Product + huidige prijs query; had je die al gevonden ?

  • momania
  • Registratie: Mei 2000
  • Laatst online: 18:20

momania

iPhone 30! Bam!

SQL:
1
2
3
4
5
6
7
8
select 
  * 
from 
  tblProductPrices price join tblProducts product on price.ProductID = product.ID
where
  now() > price.DateFrom and now() < price.DateTo
-- eventueel nog:
and product.ProductDescription like '%?%'


Zoiets kan het worden.
Maar aangezien je al aangeeft nog niet echt veel ervaring te hebben met sql, in het bijzonder joinen, is het dan niet verstandiger om daar eerst eens wat over te gaan lezen? ;)

Neem je whisky mee, is het te weinig... *zucht*


  • GieltjE
  • Registratie: December 2003
  • Laatst online: 18:06

GieltjE

Niks te zien...

Topicstarter
TheRookie schreef op dinsdag 09 januari 2007 @ 13:38:
Kort geleden nog iemand met in principe eenzelfde vraag: [SQL] Product + huidige prijs query; had je die al gevonden ?
Ja maar denk niet dat ik daar veel verder meekom
momania schreef op dinsdag 09 januari 2007 @ 13:42:
SQL:
1
2
3
4
5
6
7
8
select 
  * 
from 
  tblProductPrices price join tblProducts product on price.ProductID = product.ID
where
  now() > price.DateFrom and now() < price.DateTo
-- eventueel nog:
and product.ProductDescription like '%?%'


Zoiets kan het worden.
Maar aangezien je al aangeeft nog niet echt veel ervaring te hebben met sql, in het bijzonder joinen, is het dan niet verstandiger om daar eerst eens wat over te gaan lezen? ;)
Ziet er goed uit, maar ik kan price.DateFrom niet direct vergelijken met now() want die is een ander formaat (zie eerste post).
Maar het ziet er goed uit, lezen zou ik inderdaad moeten doen maar soms is de tijd daarvoor iets te kort.

[ Voor 3% gewijzigd door GieltjE op 09-01-2007 13:46 ]

Hell / 0


  • momania
  • Registratie: Mei 2000
  • Laatst online: 18:20

momania

iPhone 30! Bam!

GieltjE schreef op dinsdag 09 januari 2007 @ 13:45:
Ziet er goed uit, maar ik kan price.DateFrom niet direct vergelijken met now() want die is een ander formaat (zie eerste post).
Dus die DateFrom/DateTo is nu een tekst field? Waarom maak je daar dan geen echte datum field van?
Maar het ziet er goed uit, lezen zou ik inderdaad moeten doen maar soms is de tijd daarvoor iets te kort.
Hoezo te kort? Je wilt toch niet zeggen dat je een opdracht heb aangenomen waar je de kennis niet voor hebt hè?

[ Voor 33% gewijzigd door momania op 09-01-2007 13:48 ]

Neem je whisky mee, is het te weinig... *zucht*


  • GieltjE
  • Registratie: December 2003
  • Laatst online: 18:06

GieltjE

Niks te zien...

Topicstarter
momania schreef op dinsdag 09 januari 2007 @ 13:47:
[...]

Dus die DateFrom/DateTo is nu een tekst field? Waarom maak je daar dan geen echte datum field van?
Zou kunnen maar ik krijg alles eens in de zoveel tijd opnieuw aangedragen dan moet ik elke keer een script draaien.
Maar dat is dan in ieder geval efficienter dan elke keer als er een query komt alles omrekenen, ik ga het zo eens proberen

Hell / 0


  • mithras
  • Registratie: Maart 2003
  • Niet online
momania schreef op dinsdag 09 januari 2007 @ 13:47:
[...]

Dus die DateFrom/DateTo is nu een tekst field? Waarom maak je daar dan geen echte datum field van?
^^ with him. date, datetime en timestamp zijn juist mooie velden binnen een database, omdat je dus tijden kan vergelijken: eerder wordt dan kleiner dan (<) en later wordt groter dan (>). Je hoeft dan niet meer na te denken over de format van je datum en tijd :)

  • GieltjE
  • Registratie: December 2003
  • Laatst online: 18:06

GieltjE

Niks te zien...

Topicstarter
Opgelost de code is nu als volgt;

SELECT * FROM tblProducts, tblProductPrices WHERE tblProducts.ProductID = tblProductPrices.ProductID AND tblProductPrices.DateFrom <= '".time()."' AND tblProductPrices.DateTo >= '".time()."' AND tblProductPrices.Price != '0'

Simpel en effectief, moet alleen alle DateFrom en DateTo naar epoch omzetten maar dat is geen probleem

Hell / 0

Pagina: 1