Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь в правильном получении данных голосования. / 5 сообщений из 5, страница 1 из 1
04.08.2013, 15:44:10
    #38354333
rganzhuyev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в правильном получении данных голосования.
Есть таблица с множеством полей vit_pics в которой хранятся данные о фотографиях. Сейчас нас интересуют только 2 поля vk_votes, fb_votes.

Нужно получить кол-во голосов vk+facebook и определить место фотографии в рейтинге.
Я написал такой запрос.

Код: sql
1.
2.
3.
SELECT id, (vk_votes + fb_votes) votes, (SELECT COUNT(id) FROM vit_pics WHERE (vk_votes+fb_votes) > votes) place
            FROM  `vit_pics`
            WHERE id=' + someId;



Потом place в программе просто увеличиваю на 1.
Вроде работает, но есть одно но. Если есть несколько фотографии с одинаковым кол-вом голосов, начинает работать неправильно.
Например:
Есть 1 фотография с кол-вом голосов 10, 2 фотографии с кол-вом голосов 5 и 2 фотографии с кол-вом голосов 2.
Так вот с 10 голосами фото будет конечно на 1-ом месте, 2 фото с кол-вом голосов 5 будут на втором месте, а вот 2 фото с кол-вом голосов 2 будут на 4-ом месте.

Все дело в том, что мы просто считаем кол-во фотографий, у которых рейтинг больше, без учета того, что у несколько фотографий может быть одинаковый рейтинг. Вот собственно что мне нужно. Переписать запрос так, чтобы учесть недостаток моего запроса.

Помогите, пожалуйста.
...
Рейтинг: 0 / 0
04.08.2013, 16:00:14
    #38354342
qwerty112
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в правильном получении данных голосования.
rganzhuyevНапример:
Есть 1 фотография с кол-вом голосов 10, 2 фотографии с кол-вом голосов 5 и 2 фотографии с кол-вом голосов 2.
Так вот с 10 голосами фото будет конечно на 1-ом месте, 2 фото с кол-вом голосов 5 будут на втором месте, а вот 2 фото с кол-вом голосов 2 будут на 4-ом месте.

и как должно быть "правильно" ? обе на 3-ем месте ? или одна на 3-ем, вторая на 4-ом ?
первое - так
Код: sql
1.
2.
3.
4.
5.
...
(SELECT COUNT(a.id) FROM 
(select min(id) id, vk_votes+fb_votes as votes from vit_pics group by vk_votes+fb_votes) a 
WHERE a.votes > `vit_pics`.vk_votes + `vit_pics`.fb_votes) place
...
...
Рейтинг: 0 / 0
04.08.2013, 16:00:15
    #38354343
javajdbc
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в правильном получении данных голосования.
rganzhuyev,

Вам надо четко определится как расставлять места
в пределах одинакового количества фотографил.
Допустим, по ИД. Тогда

авторSELECT
t1.id,
(t1.vk_votes + t1.fb_votes) votes,
(
SELECT COUNT(t2.id)
FROM vit_pics t2
WHERE (t2.vk_votes+t2.fb_votes) > votes
AND t2.id > t1.id
) place
FROM `vit_pics` t1
WHERE t1.id= + someId;
...
Рейтинг: 0 / 0
04.08.2013, 16:38:57
    #38354358
rganzhuyev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в правильном получении данных голосования.
qwerty112,

Спасибо, большое, да это именно то что нужно.
...
Рейтинг: 0 / 0
04.08.2013, 17:11:16
    #38354380
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь в правильном получении данных голосования.
Что-то там не так... sqlfiddle.com/#!2/1b836/27
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Нужна помощь в правильном получении данных голосования. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]