Pietje Prik
Legacy Member
Hoi mensjes
Ik ben bezig met een hardware winkel site, en dit zijn de tabellen en velden die ik gebruik:
Nu, mijn site is er een waar verschillende winkels hun prijs kunnen zetten voor een bepaald product (in de tabel WinkelPrijs). Ik wil de minimum, de maximum en vervolgens de gemiddelde prijs van elk product berekenen. Nu, dit maakt het moeilijk omdat er dus ook producten moeten geselecteerd zijn waarvoor nog geen prijs voor gezet is. Daarom het ik een UNION gebruikt en deze selecteert de rijen die nog niet in de eerste query verschenen.
Deze query werkt, maar hij is vrij omslachtig. Ik vroeg me af of er geen gemakkelijkere manier bestaat om deze data te bemachtigen. Of heeft deze query niet zoveel invloed op de performance van het systeem waarop mijn MySQL database staat. Deze query zal heel vaak uitgevoerd worden - nl telkens wanneer een productlijst opgevraagd wordt.
Danku
Ik ben bezig met een hardware winkel site, en dit zijn de tabellen en velden die ik gebruik:
Code:
++++++++++++++++++++
| ProductCategorie |
++++++++++++++++++++
| prod_id |
| cat_id |
++++++++++++++++++++
+++++++++++++++++++++++
| Product |
+++++++++++++++++++++++
| id |
| naam |
| kleine_beschrijving |
| afbeelding_klein |
| fabrikant_id |
+++++++++++++++++++++++
+++++++++++++++++++++++
| Fabrikant |
+++++++++++++++++++++++
| id |
| naam |
| afbeelding_klein |
| url |
+++++++++++++++++++++++
++++++++++++++++++++
| WinkelPrijs |
++++++++++++++++++++
| winkel_id |
| prod_id |
| prijs |
++++++++++++++++++++
Code:
[Fabrikant]
|
1
|
|
|
*
|
[Product]--1----------*--[ProductCategorie]--*-------1--[Categorie]
|
1
|
|
|
*
|
[WinkelPrijs]
Nu, mijn site is er een waar verschillende winkels hun prijs kunnen zetten voor een bepaald product (in de tabel WinkelPrijs). Ik wil de minimum, de maximum en vervolgens de gemiddelde prijs van elk product berekenen. Nu, dit maakt het moeilijk omdat er dus ook producten moeten geselecteerd zijn waarvoor nog geen prijs voor gezet is. Daarom het ik een UNION gebruikt en deze selecteert de rijen die nog niet in de eerste query verschenen.
Deze query werkt, maar hij is vrij omslachtig. Ik vroeg me af of er geen gemakkelijkere manier bestaat om deze data te bemachtigen. Of heeft deze query niet zoveel invloed op de performance van het systeem waarop mijn MySQL database staat. Deze query zal heel vaak uitgevoerd worden - nl telkens wanneer een productlijst opgevraagd wordt.
PHP:
(
SELECT q.id AS id, q.naam AS naam, q.kleine_beschrijving AS beschrijving, q.afbeelding_klein AS afbeelding, r.naam AS fabrikant,
r.url, r.afbeelding_klein, round(min(s.prijs),2) AS minprijs, round(max(s.prijs),2) as maxprijs, round(avg(s.prijs),2) as avgprijs
FROM productcategorie pc, product q, fabrikant r, winkelprijs s
WHERE pc.prod_id = q.id
AND q.fabrikant_id = r.id
AND pc.cat_id = ".$this->parent_id."
AND s.prod_id = q.id
GROUP BY q.id
)
UNION
(
SELECT q.id AS id, q.naam AS naam, q.kleine_beschrijving AS beschrijving, q.afbeelding_klein AS afbeelding, r.naam AS fabrikant,
r.url, r.afbeelding_klein, '-1' AS minprijs, '-1' as maxprijs, '-1' as avgprijs
FROM productcategorie pc, product q, fabrikant r, winkelprijs s
WHERE pc.prod_id NOT IN
(
SELECT q.id
FROM productcategorie pc, product q, fabrikant r, winkelprijs s
WHERE pc.prod_id = q.id
AND q.fabrikant_id = r.id
AND pc.cat_id = ".$this->parent_id."
AND s.prod_id = q.id
ORDER BY q.naam ASC
)
AND pc.prod_id = q.id
AND pc.cat_id = ".$this->parent_id."
GROUP BY q.id
)
ORDER BY naam ASC
;
Danku