[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Правильная работа. Голосования.
deman455
(При создание текста в словах появились пробелы, не понимаю что за глюк)

Что я имею ввиду под этим вопросом?
Сделал не большой сайт. На нем можно писать новости и т.п. Возникла необходимость голосования за новость (типу "Мне нравиться" и "Не нравиться&quo t;). Суть вопроса. Каким правильным методом сделать запись в базу, что бы можно б ыло голосовать, и id пользователя помечался как проголосовавший?

А теперь еще яснее, на примере. Так как хотел сделать я. В строку MySql где на писана новость, вся инфа о ней, записывать ID`ы всех тех, кто проголосовал, через кому, в один ряд. Но на сколько я понял что это будет не правильно, т.к. пользоват ель захочет переголосовать, а для этого придется парсить весь ряд (все id`ы напис анные через кому, что бы найти нужный, и удалить из списка проголосовавших). Второй вариант, возможно более верен, но я все равно его не пойму. При голосовании в базу записывается новая строка с столбацми "id новости", "id проголосов авшего", "Оценка за новость". Но в таком случае получится много Инс ертов, а самое главное что при загрузки новости придется искать все строки в которы х "id новости" совпадает с загруженной у пользователя на странице, при эт о еще надо будет высчитывать среднюю оценку из всех проголосовавших...

Как правильно реализовать голосование за новость? (Не имеет значение, хоть "М не нравиться" и не нравиться, или по пятибальной шкале). Или как реализовала т акая функция В контакте? Главное что бы потребляемость была минимальной.



Спустя 1 час, 35 минут, 45 секунд (31.10.2010 - 00:16) SlavaFr написал(а):
Цитата (deman455 @ 30.10.2010 - 19:40)
При голосовании в базу записывается новая строка с столбацми "id новости", "id проголосов авшего", "Оценка за новость". Но в таком случае получится много Инс ертов, а самое главное что при загрузки новости придется искать все строки в которы х "id новости" совпадает с загруженной у пользователя на странице, при эт о еще надо будет высчитывать среднюю оценку из всех проголосовавших...

1) это правилный метод, дополнително надо зделать unique key на ("id новости", "id проголосовавшего")
2) не вижу не какой проблемы в инсертах в выше указаную таблицу и не понимаю что тебя в этом смущает.
3) для выщитывания средней оценки исползуют агригатную функцию
select avg(ozenka) from ozenki where novost_id=xx
так что не надо тебе все оценки считывать

Спустя 2 минуты, 17 секунд (31.10.2010 - 00:18) FatCat написал(а):
Цитата (deman455 @ 30.10.2010 - 23:40)
в словах появились пробелы, не понимаю что за глюк

Это был мой глюк.
Примите мои извинения. Исправляюсь. smile.gif


ИМХО, правильнее всего будет делать таблицу голосов и каждому голосу - строка таблицы.
Я бы сделал поля id (инкремент), vote_id (айдишник голосования), voter_id (айдишник голосовавшего и vote (что наголосовал).
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.