2014-01-09 4 views
2

Я не могу получить правильное количество отзывов, которые идут с продуктом (последний var запроса). Он возвращает номера, которые выходят из парка. Если нет ни одного отзыва, то это правильно эхо это 0.Count, возвращающий неправильное значение в объединенном запросе mysql

$queryProduct = $mysqli->prepare(" 
    SELECT p.product_id, p.product_name, p.product_pic, AVG(r.review_stars), MIN(c.price_price), p.product_url, v.vendor_name, p.product_clicks, SUM(c.price_clicks), COUNT(c.price_price), c.price_affiliate, COUNT(r.review_id) 
    FROM products as p 
    LEFT OUTER JOIN reviews as r ON p.product_id = r.review_product 
    LEFT OUTER JOIN prices as c ON c.price_product = p.product_id 
    LEFT OUTER JOIN vendors as v ON c.price_vendor = v.vendor_id 
    GROUP BY p.product_id 
    ORDER BY p.product_clicks DESC 
    LIMIT 21"); 
$queryProduct->execute(); 
$queryProduct->bind_result($product_id, $product_name, $product_pic, $review_stars, $price_price, $product_url, $vendor_name, $product_clicks, $price_clicks, $num_vendors, $price_affiliate, $num_reviews); 
while($queryProduct->fetch()) { 
    echo $num_reviews; 
} 
$queryProduct->close(); 

ответ

3

Моя дикая догадка, что вам нужно COUNT(DISTINCT r.review_id).

Чтобы отладить этот запрос, вы должны начать с проверки единственного product_id с плохим значением и удалить все агрегаты, чтобы проверить, где проблема. Например, я бы начал с запуска

SELECT p.product_id, p.product_name, p.product_pic, r.review_stars, c.price_price, p.product_url, v.vendor_name, p.product_clicks, c.price_clicks, c.price_price, c.price_affiliate, r.review_id 
FROM products as p 
LEFT OUTER JOIN reviews as r ON p.product_id = r.review_product 
LEFT OUTER JOIN prices as c ON c.price_product = p.product_id 
LEFT OUTER JOIN vendors as v ON c.price_vendor = v.vendor_id 
WHERE p.product_id = 12345 -- choose a bad id in your output 
ORDER BY p.product_clicks DESC 
+0

В этом была проблема. Сейчас работает отлично. Спасибо. – Katp00ps

Смежные вопросы