MySQL评论评级

时间:2014-01-07 07:41:57

标签: mysql rating review

Opinie:

CREATE TABLE `opinie` (
`id_opinie` INT(11) NOT NULL AUTO_INCREMENT,
`id_produkt_opinie` INT(11) NULL DEFAULT NULL,
`opinia_opinie` VARCHAR(255) NULL DEFAULT NULL,
`ocena_opinie` VARCHAR(5) NULL DEFAULT NULL,
`aktywny_opinie` ENUM('Y','N') NULL DEFAULT 'N',
PRIMARY KEY (`id_opinie`),
UNIQUE INDEX `id_opinie` (`id_opinie`)

产品:

CREATE TABLE `produkt` (
`id_produkt` INT(10) NOT NULL AUTO_INCREMENT,
`kod` VARCHAR(50) NOT NULL,
`tytul` VARCHAR(100) NOT NULL,
`opis` TEXT NOT NULL,
PRIMARY KEY (`id_produkt`),
UNIQUE INDEX `id_produkt` (`id_produkt`)

SELECT *, AVG(ocena_opinie) AS review_avg FROM produkt
LEFT JOIN opinie ON opinie.id_produkt_opinie = produkt.id_produkt AND aktywny_opinie = 'Y';

产品:

id      |    name     |      img       |

________________________________________
1       |   product1  |  product1.jpg  |

2       |   product2  |  product2.jpg  |

3       |   product3  |  product3.jpg  |

评论:

id      |   rating    |  product_id    | activ   |

________________________________________
1       |   4.0       |  1             |  Y

2       |   5.0       |  1             |  Y

3       |   3.0       |  1             |  Y

4       |   4.0       |  2             |  Y

5       |   5.0       |  2             |  Y

Product3 id 3 NULL

我现在只显示一条记录,如何为每个产品展示一些意见和AVG

2 个答案:

答案 0 :(得分:0)

像这样,使用子查询来获得平均值: -

SELECT Produkt.id_produkt,
        Produkt.kod,
        Produkt.tytul,
        Produkt.opis,
        opinie.id_opinie,
        opinie.id_produkt_opinie,
        opinie.opinia_opinie,
        opinie.ocena_opinie,
        opinie.aktywny_opinie,
        review_avg
FROM produkt
LEFT JOIN opinie 
ON opinie.id_produkt_opinie = produkt.id_produkt 
AND aktywny_opinie = 'Y'
INNER JOIN
(
    SELECT produkt.id_produkt , AVG(ocena_opinie) AS review_avg 
    FROM produkt
    LEFT JOIN opinie 
    ON opinie.id_produkt_opinie = produkt.id_produkt 
    AND aktywny_opinie = 'Y'
    GROUP BY produkt.id_produkt 
) Sub1
ON Sub1.id_produkt = produkt.id_produkt 

答案 1 :(得分:0)

cat1 Works TY:)

 SELECT  *
FROM produkt
LEFT JOIN pojemnosc ON pojemnosc.id_pojemnosc = produkt.id_pojemnosc
LEFT JOIN producent ON producent.id_producent = produkt.id_producent 
LEFT JOIN kategoria ON kategoria.id_kategoria = produkt.id_kategoria
LEFT JOIN opinie 
ON opinie.id_produkt_opinie = produkt.id_produkt 
AND aktywny_opinie = 'Y'
INNER JOIN
(
    SELECT produkt.id_produkt , AVG(ocena_opinie) AS review_avg , COUNT(ocena_opinie) AS count
    FROM produkt
    LEFT JOIN opinie 
    ON opinie.id_produkt_opinie = produkt.id_produkt 
    AND aktywny_opinie = 'Y'
    GROUP BY produkt.id_produkt 
) Sub1
ON Sub1.id_produkt = produkt.id_produkt 

WHERE nazwa_kategoria_mr = 'cat1'
GROUP BY produkt.id_produkt 
ORDER BY produkt.id_produkt ASC LIMIT 2