Проблемы с логикой в ​​системе голосования - PullRequest
3 голосов
/ 20 июля 2011

Я ищу помощь в системе голосования сверху вниз.

В настоящий момент у меня есть таблица голосования, в которой указаны пользователь, за которого проголосовали, пользователь, за которого проголосовали, и часть информации (парковкаspot), за который проголосовали за

CREATE TABLE parking_spots_votes(
vote_id INTEGER NOT NULL AUTO_INCREMENT PRIMARY KEY,

parking_spot_id INTEGER DEFAULT NULL,
    key  parking_spot_id_fk (parking_spot_id),
    FOREIGN KEY (parking_spot_id) REFERENCES parking_spots(id),

uploaded_by_user_id INTEGER DEFAULT NULL,
    key  user_id_fk (uploaded_by_user_id),
    FOREIGN KEY (uploaded_by_user_id) REFERENCES parking_angel_users(id),

vote_casted_user_id INTEGER DEFAULT NULL,
    key  vote_cast_user_id_fk (vote_casted_user_id),
    FOREIGN KEY (vote_casted_user_id) REFERENCES parking_angel_users(id),

vote_type INTEGER NOT NULL
 )

. Тип голосования может быть 0 за отсутствие голосования, 1 за голосование "за", 2 за понижение голосов

, теперь у меня небольшая логическая проблема.

например

  1. что, если пользователь уже проголосовал на parking_spot
  2. Как проверить, проголосовал ли уже пользователь и имеет ли онне вставляй потом, но если он потом не проголосовал за возврат уже.

  3. Как мне обновить счет пользователя (uploaded_by_user_id).плюс один за голосование против и минус один за голосование против.

так что общий поток будет,

Пользователь нажимает на голосование, сервер проверяет, был ли уже проголосован, если так, то вы не можете голосовать снова.если нет, то voice_casted_user_id = текущий пользователь, parking_spot_id = текущая информация, uploaded_by_user_id = человек, который загрузил информацию, тогда оценка uploaded_by_user будет обновляться в зависимости от типа голосования.

Я использую Java-сервлет с подключением JDBCв базу данных MYSQL.

Есть идеи для меня?

Ответы [ 2 ]

3 голосов
/ 20 июля 2011
  1. что если пользователь уже проголосовал за парковку_пот?
  2. Как я могу проверить, проголосовал ли пользователь уже, а если нет, то вставить, а если нет, то голосование за возврат уже проголосовало.

Это в основном один и тот же вопрос: как мне проверить, проголосовал ли уже пользователь на парковочном месте? Что ж, просто запустите запрос, который выбирает записи, в которых совпадают значения parking_spot_id и voice_casted_user_id.

Как обновить счет пользователя (uploaded_by_user_id). плюс один за голосование против и минус один за голосование против?

Если бы не было особых проблем, я бы изменил значения для voice_type на +1 для upvote и -1 для downvote. Тогда это просто вопрос SELECT SUM(vote_type) FROM table WHERE uploaded_by_user_id=...

Надеюсь, это поможет

1 голос
/ 20 июля 2011

Вы можете установить первичный ключ с помощью parking_spot_id, uploaded_user_id, casted_user_id

таким образом, когда один и тот же пользователь голосует за то же место для парковки того же загруженного пользователя, вы можете поймать исключение и обработать его, что «вы уже проголосовали!»

Если тебе это не нравится Вы можете управлять процессом, написав свой собственный механизм управления

перед сохранением голоса напишите выбор, который получает количество записей с parking_spot_id, uploaded_user_id, casted_user_id, если число больше 0, это означает, что уже есть голосование, затем не сохраняйте и не отправляйте свое сообщение. оценка увеличится путем голосования и обновления записи.

Надеюсь, это поможет.

...