Beste mede tweakers,
Voor een school project ben ik bezig een prijsvergelijk systeem op te zetten, de vergelijking bestaat uit een product die gekoppeld is aan een merk die weer gekoppeld is aan een leverancier. hierbij hebben ze allemaal prioriteiten, zo kan het dus zijn dat een poduct prio 1 heeft met als merk prio 1 en de leverancier ook prio 1 dat maakt dus 3, hoe hoger deze waarde is hoe belangrijker het is dat de prijs van dit product snel word vergeleken met andere prijzen. Om een lijst te maken van alle producten die vergeleken moeten worden word er een SQL query gedraaid. Deze ziet er als volgt uit:
Dit werkt prima, de prioriteiten (importent) worden netjes bij elkaar opgeteld en gesorteerd, zodra de prijsvergelijk start komt dus ook netjes product 1 in de lijst naar boven en kan deze vergeleken worden. Maar elke keer als de prijs vergelijking opent krijg je dus hetzelfde product, dus wat heb ik bedacht. Zodra er een prijs geinsert word krijgt deze in de price tabel lastprice = 1 en komt de prioriteit op -100 hiebij komt die dus weer helemaal onder in het rijtje en als je de prijsvergelijk opent begin je weer bij waar je gebleven was, tot zover mijn theorie.
Om dit te realiseren heb ik een query gemaakt die ook een leftjoin doet in de prijstabel want zodra deze niet bestaat moet die wel naar voren komen alleen dan met een hogere prio. zodra deze niet bestaat moet de prio op 0 gezet worden en komt deze naar boven. dit is de volgende query:
Als ik deze query uitvoer, krijg ik een mooi ronddraiend rondje te zien, en uiteindelijk zie ik aardig wat CPU belasting op mijn machine maar hoelang ik ook wacht er gebeurd niks... Ik zie vast iets stoms over het hoofd of mijn hele theorie klopt niet
Is er iemand die mij kan helpen?
Alvast bedankt!
Voor een school project ben ik bezig een prijsvergelijk systeem op te zetten, de vergelijking bestaat uit een product die gekoppeld is aan een merk die weer gekoppeld is aan een leverancier. hierbij hebben ze allemaal prioriteiten, zo kan het dus zijn dat een poduct prio 1 heeft met als merk prio 1 en de leverancier ook prio 1 dat maakt dus 3, hoe hoger deze waarde is hoe belangrijker het is dat de prijs van dit product snel word vergeleken met andere prijzen. Om een lijst te maken van alle producten die vergeleken moeten worden word er een SQL query gedraaid. Deze ziet er als volgt uit:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| SELECT ( pricecompare_products.importanter + pricecompare_brands.importanter + pricecompare_presenter.importanter ) AS importent, pricecompare_products.`Name` AS productname, pricecompare_presenter.`Name` AS provider, pricecompare_brands.`Name` AS brandname, pricecompare_presenter.ID AS presenterID, pricecompare_products.ID AS productID, pricecompare_products.Mediaurl AS mediaURL, pricecompare_presenter.Country AS providercountry FROM pricecompare_competitor INNER JOIN pricecompare_products ON pricecompare_competitor.BrandID = pricecompare_products.BrandID INNER JOIN pricecompare_brands ON pricecompare_products.BrandID = pricecompare_brands.ID INNER JOIN pricecompare_presenter ON pricecompare_competitor.PresenterID = pricecompare_presenter.ID WHERE pricecompare_products.active = '1' ORDER BY importent DESC |
Dit werkt prima, de prioriteiten (importent) worden netjes bij elkaar opgeteld en gesorteerd, zodra de prijsvergelijk start komt dus ook netjes product 1 in de lijst naar boven en kan deze vergeleken worden. Maar elke keer als de prijs vergelijking opent krijg je dus hetzelfde product, dus wat heb ik bedacht. Zodra er een prijs geinsert word krijgt deze in de price tabel lastprice = 1 en komt de prioriteit op -100 hiebij komt die dus weer helemaal onder in het rijtje en als je de prijsvergelijk opent begin je weer bij waar je gebleven was, tot zover mijn theorie.
Om dit te realiseren heb ik een query gemaakt die ook een leftjoin doet in de prijstabel want zodra deze niet bestaat moet die wel naar voren komen alleen dan met een hogere prio. zodra deze niet bestaat moet de prio op 0 gezet worden en komt deze naar boven. dit is de volgende query:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| SELECT CASE WHEN COUNT(pricecompare_price.importanter) = NULL THEN (0 + pricecompare_products.importanter + pricecompare_brands.importanter + pricecompare_presenter.importanter) ELSE (pricecompare_price.importanter + pricecompare_products.importanter + pricecompare_brands.importanter + pricecompare_presenter.importanter) END AS importent, pricecompare_products.`Name` AS productname, pricecompare_presenter.`Name` AS provider, pricecompare_brands.`Name` AS brandname, pricecompare_presenter.ID AS presenterID, pricecompare_products.ID AS productID, pricecompare_products.Mediaurl AS mediaURL, pricecompare_price.product_url, pricecompare_presenter.Country AS providercountry FROM pricecompare_competitor INNER JOIN pricecompare_brands ON pricecompare_competitor.BrandID = pricecompare_brands.ID INNER JOIN pricecompare_presenter ON pricecompare_competitor.PresenterID = pricecompare_presenter.ID INNER JOIN pricecompare_products ON pricecompare_competitor.BrandID = pricecompare_products.BrandID LEFT JOIN pricecompare_price ON pricecompare_competitor.PresenterID = pricecompare_price.AanbiederID AND pricecompare_products.ID = pricecompare_price.ProductID AND pricecompare_price.last_price = '1' WHERE pricecompare_products.active = '1' ORDER BY importent DESC LIMIT 0,1 |
Als ik deze query uitvoer, krijg ik een mooi ronddraiend rondje te zien, en uiteindelijk zie ik aardig wat CPU belasting op mijn machine maar hoelang ik ook wacht er gebeurd niks... Ik zie vast iets stoms over het hoofd of mijn hele theorie klopt niet
Is er iemand die mij kan helpen?
Alvast bedankt!