Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




MySQL.RU - Webboard



Вернуться
Как сделать выборку фотографий из БД у которы (Александр) 18/12/2013 - 13:19:09
      Re: Как сделать выборку фотографий из БД у которы (Akina) 18/12/2013 - 16:50:22

> Original message text:
> From: Александр - 18/12/2013 - 13:19:09
> Subject:Как сделать выборку фотографий из БД у которы
> -----------------
> Есть таблица 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'
>


From: Akina - 18/12/2013 - 16:50:22
Subject:Как сделать выборку фотографий из БД у которы
-----------------
Бред, а не запрос.

Левое связывание, вырождающееся во внутреннее.
Неполная группировка.
Среднее по ENUM - это вообще песня... хоть бы справку почитал, что это такое...

Нет, тут не помогать надо, а делать всё за тебя... а лениво.


[Это сообщение - спам!]

Последние сообщения из форума

Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
42976



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |