Nieuw lid |
|
Op mijn website kunnen mensen een product aan de hand van enkele criteria beoordelen. Deze criteria zijn overigens niet altijd hetzelfde. Zo heeft een mp3 speler bijvoorbeeld een criteria geluidskwaliteit en dat heeft bijvoorbeeld een boormachine niet.
Een mp3-speler heeft bijvoorbeeld 4 criteria. Per beoordeling van de gebruiker geef ik deze weer en bovenaan de pagina geef ik ook nog eens de gemiddeldes per criteria en het totale gemiddelde van alle beoordelaars van dat product weer. Dat ziet er dan dus bijvoorbeeld als volgt uit:
TOTAAL beoordeling product:
Gemiddelde: 7.1
Gebruiksgemak: 6.6
Geluidskwaliteit: 7.6
Mogelijkheden: 7.0
Vormgeving: 7.2
Nu heb ik dit allemaal gewoon voor elkaar gekregen met 2 query's. De eerste query berekent het totale gemiddelde en de tweede query berekent het totaal gemiddelde per criteria.
Nu heeft nog niet elk product al 1 of meer beoordeling. Op dit moment wordt dan helemaal niets weergegeven aangezien er geen resultaten uit de query komen. Nu wil ik het dus zo hebben dat hierbij wel gewoon alle criteria weergegeven worden, maar alleen nog geen cijfer. Ik dacht eerst dat ik dit kon doen door if (mysql_num_rows($result) > 1) te doen, maar dat is niet goed. Er is namelijk wel een resultaat bij de tweede query aangezien ik wel de betreffende criteria wil weergeven. Hoe kan ik dit dus het beste doen volgens jullie?
De tabellen die ik hiervoor gebruik zijn:
cijfers (waarde, criteria_id, beoordelingen_id)
criteria (id, naam)
beoordelingen (id, naam, e-mail, toelichting, datum, product_id)
Query voor totaal gemiddelde:
SELECT AVG(cijfers.waarde) AS gemiddeld
FROM cijfers
INNER JOIN beoordelingen on cijfers.review_id = beoordelingen.id
WHERE beoordelingen.product_id = '" .$row_product['id']. "'
GROUP BY beoordelingen.product_id
SELECT AVG(cijfers.waarde) AS gemiddeld FROM cijfers INNER JOIN beoordelingen ON cijfers.review_id = beoordelingen.id WHERE beoordelingen.product_id = '" .$row_product['id']. "' GROUP BY beoordelingen.product_id
Query voor criteria gemiddelde:
SELECT AVG(cijfers.waarde) AS gemiddeld, criteria.naam AS criterium, beoordelingen.product_id AS product_id
FROM cijfers
INNER JOIN criteria ON cijfers.criterium_id = criteria.id
INNER JOIN beoordelingen ON cijfers.review_id = beoordelingen.id
WHERE beoordelingen.product_id = '" .$row_product['id']. "'
GROUP BY criteria.naam
SELECT AVG(cijfers.waarde) AS gemiddeld, criteria.naam AS criterium, beoordelingen.product_id AS product_id FROM cijfers INNER JOIN criteria ON cijfers.criterium_id = criteria.id INNER JOIN beoordelingen ON cijfers.review_id = beoordelingen.id WHERE beoordelingen.product_id = '" .$row_product['id']. "' GROUP BY criteria.naam
Ik hoop dat iemand hier een antwoord op weet.
|