У меня есть поисковая система для интернет-магазина, я хочу дать пользователю возможность фильтровать товары по рейтингу, до сих пор мой запрос выглядит так:
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
это дает мне результат, но не вычисляет среднее значение.
Цени любую помощь
Спасибо
AND ratings_products.ratings >= '40' AND ratings_products.ratings <= 59
Это означает, что вы хотите значения между 40 и 59. В вашем примере вы видите 20 и 85, и ни один из них не находится в диапазоне, который вы запрашиваете, так что результат NULL
Удаление AND ratings_products.ratings <= 59
часть оставляет запрос на рейтинг выше 40, то есть 85, сам по себе, ничего среднего.
Я что-то упустил или вы запрашиваете неправильные значения?
Других решений пока нет …