SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 18.12.2013 13:18:27

mcxd
Участник
Зарегистрирован: 18.12.2013
Сообщений: 1

Как сделать выборку фотографий из БД у которых более 3-х оценок?

Есть таблица top100_votes, в которой хранятся оценки пользователей за фотографии (похоже на аналог топ-100 мамбы, лавплэнет и т.д.). Она имеет такой вид:

id | id_foto | id_voter | mark | data

id - id записи, auto_increment
id_foto - айди фотографии за которую проголосовали
id_voter - айди пользователя, который проголосовал за фото
mark - оценка, которую он поставил, от 1 до 6
data - время голосования

Есть ещё одна таблица fotos хранящая информацию о фотографиях пользователей, в ней кроме других полей есть поля:
id_foto - айди фотографии
id_user - айди пользователя, владельца фотографии

И ещё одна таблица users, хранящая информацию о пользователях сайта с полями:
id_user - айди пользователя
gender - пол пользователя
country - страна пользователя

Допустим в скрипте у нас уже имеется пол и страна пользователя, например:

$country_id = 251;
$gender = 2;

Помогите сделать выборку фотографий из таблицы top100_votes, принадлежащих пользователям из страны $country_id, пола $gender у которых есть минимум 5 оценок, рассчитать среднюю оценку (т.е. сумму оценок разделить на количество голосов) и отсортировать в порядке убывания.

У меня получился такой SQL-запрос:
SELECT a.id_foto, e.id_user AS id_owner, s.gender, s.id_country, COUNT(a.id_user) as cnt, AVG(a.mark) AS mark_avg
FROM top100_votes a
JOIN user_upload e ON a.id_foto=e.id
LEFT JOIN user s ON e.id_user=s.id
WHERE s.id_country = '251' AND s.gender = '2'
GROUP by a.id_foto
HAVING COUNT(a.id_user) >= 5
ORDER BY mark_avg DESC

Но при тестировании обнаружил, что функция AVG считает среднее число неправильно!
Например для фото с ID 34950 в БД имеются следующие оценки: 5 4 2 5 2 3
Но для фото ID 34950 скрипт выводит среднюю оценку 4.5 хотя, если посчитать средняя оценка 3.5
Для других фото бывает выводит и 7, хотя максимальная оценка, которую можно поставить 6
Помогите найти ошибку или переписать SQL запрос правильно.
Тип поля mark - ENUM с возможными значениями 'skip','1','2','3','4','5','6'

Неактивен

 

#2 18.12.2013 14:43:13

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как сделать выборку фотографий из БД у которых более 3-х оценок?

1. Что за таблица user_upload ?
2. Зачем left join ?
3. FAQ №16

Если не получиться, то приводите структуру таблиц в виде show create table `имя таблицы`
и набор тестовых данных в виде insert into ...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson