2014-01-07 42 views
-2

客户评论:MySQL的点评评级

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`) 

PRODUKT:

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 

产品3号3 NULL

我现在只有一个记录显示,该怎么做每一个产品的表现出了若干意见和AVG

+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 
0

cat 1 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