|
|
|
Как сделать выборку фотографий из БД у которых более 3-х оценок?
|
|||
|---|---|---|---|
|
#18+
Есть таблица 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' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 13:14:13 |
|
||
|
Как сделать выборку фотографий из БД у которых более 3-х оценок?
|
|||
|---|---|---|---|
|
#18+
если условие s.id_country = '251' AND s.gender = '2' отбрасывает отдельные значения, то может и правильно что 4.5, о, да ты вычисляешь среднее значение из строк - круто, там и не тока 7 может получиться ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 16:18:33 |
|
||
|
Как сделать выборку фотографий из БД у которых более 3-х оценок?
|
|||
|---|---|---|---|
|
#18+
bochkovо, да ты вычисляешь среднее значение из строк - круто, там и не тока 7 может получитьсяИз ENUMов... в данном конкретном случае семь - это предел... пока он ещё каких оценок не придумает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.12.2013, 16:53:01 |
|
||
|
|

start [/forum/topic.php?fid=47&tid=1835529]: |
0ms |
get settings: |
9ms |
get forum list: |
18ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
53ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 408ms |

| 0 / 0 |
