MySQL Select AVG, используя несколько предложений WHERE

У меня есть поисковая система для интернет-магазина, я хочу дать пользователю возможность фильтровать товары по рейтингу, до сих пор мой запрос выглядит так:

SELECT products.*,prices.price,AVG(ratings_products.rating)
FROM products,prices,ratings_products
WHERE products.title REGEXP 'lg' AND products.active = 'yes'
AND prices.price >= '10' AND prices.price <= '298650'
AND products.cod_product = prices.id_product
AND ratings_products.ratings >= '40' AND ratings_products.ratings <= 59
AND ratings_products.id_product = products.cod_product
AND products.id_category = '59' LIMIT 0,1

Идея состоит в том, чтобы фильтровать по цене, конкретным фильтрам и рейтингу, все работы, кроме рейтингов. У меня есть таблица Rating_products со следующей структурой:

id | id_product | id_user | title | comment | date | rating
1  |      18    |    65   |awesome| some    |12344 | 85
2  |      18    |    84   |cool   | great   |12345 | 20

Теперь мне нужно AVG, чтобы вернуть среднее значение от 85 до 20, но запрос возвращает NULL, если я удаляю ratings_products.rating <= 59 это дает мне результат, но не вычисляет среднее значение.

Цени любую помощь

Спасибо

0

Решение

AND ratings_products.ratings >= '40' AND ratings_products.ratings <= 59

Это означает, что вы хотите значения между 40 и 59. В вашем примере вы видите 20 и 85, и ни один из них не находится в диапазоне, который вы запрашиваете, так что результат NULL

Удаление AND ratings_products.ratings <= 59 часть оставляет запрос на рейтинг выше 40, то есть 85, сам по себе, ничего среднего.

Я что-то упустил или вы запрашиваете неправильные значения?

1

Другие решения

Других решений пока нет …