Voor een site heb ik een 'Product' tabel met daarin producten. Bezoekers kunnen producten reviewen, deze reviews komen in 'Review' te staan, en worden gekoppeld met een Many to Many tabel genaamd 'Product_Review'. De Many to Many relatie is in deze situatie niet nodig, maar wel voor toekomstige plannen dus dat blijft zo.
Op reviews kan gestemd worden, er kan een thumbsup of een thumbsdown gegeven worden. Dit word opgeslagen in een tabel genaamd reviewVotes. De tabellen zien er als volgt uit (alleen de relevante kolommen):
Een vote word opgeslagen als een 1 of een -1 in de reviewVotes tabel. Wat ik nu probeer is in 1 query alle reviews van een bepaald product op te halen inclusief hun positieve en negatieve score. Nu lukt dit, maar krijg ik per review wel 2 rijen terug (een voor de positieve en een voor de negatieve votes). Wat ik probeer te bereiken is 1 rij per review terug te krijgen met 2 nieuwe kolommen, een voor positieve en een voor negatieve votes. Wat ik nu doe is:
Ik snap dat die GROUP BY `rv`.`vote` zorgt dat ik 2 rijen terugkrijg, maar zonder dat krijg ik enkel de som van de votes terug, terwijl ik graag onderscheid wil maken tussen de positieve en negatieve scores.
Op reviews kan gestemd worden, er kan een thumbsup of een thumbsdown gegeven worden. Dit word opgeslagen in een tabel genaamd reviewVotes. De tabellen zien er als volgt uit (alleen de relevante kolommen):
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| CREATE TABLE IF NOT EXISTS `review` ( `reviewId` int(11) NOT NULL auto_increment, ) CREATE TABLE IF NOT EXISTS `reviewVotes` ( `voteId` int(11) NOT NULL auto_increment, `reviewId` int(11) NOT NULL, `vote` tinyint(3) NOT NULL ) CREATE TABLE IF NOT EXISTS `product_review` ( `productId` int(11) NOT NULL, `reviewId` int(11) NOT NULL, ) |
Een vote word opgeslagen als een 1 of een -1 in de reviewVotes tabel. Wat ik nu probeer is in 1 query alle reviews van een bepaald product op te halen inclusief hun positieve en negatieve score. Nu lukt dit, maar krijg ik per review wel 2 rijen terug (een voor de positieve en een voor de negatieve votes). Wat ik probeer te bereiken is 1 rij per review terug te krijgen met 2 nieuwe kolommen, een voor positieve en een voor negatieve votes. Wat ik nu doe is:
SQL:
1
2
3
4
5
6
| SELECT `r`.*, sum(`rv`.`vote`) FROM `review` AS `r`, `reviewVotes` AS `rv`, `product_review` AS `pr` WHERE `r`.`reviewId` = `rv`.`reviewId` AND `r`.`reviewId` = `pr`.`reviewId` AND `pr`.`productId` = ? GROUP BY `r`.`reviewId`, `rv`.`vote` |
Ik snap dat die GROUP BY `rv`.`vote` zorgt dat ik 2 rijen terugkrijg, maar zonder dat krijg ik enkel de som van de votes terug, terwijl ik graag onderscheid wil maken tussen de positieve en negatieve scores.