2016-01-13 2 views
1

Я хочу иметь базу данных, в которой хранятся голоса всех пользователей. Например, пользователь ABC выбирает X по вопросу Y. Тогда тот же пользователь ABC решает проголосовать по отдельному вопросу и выбирает V по вопросу Z. Информация добавляется в базу данных каждый раз, когда пользователь нажимает кнопку отправки , Предположим, что через несколько дней один и тот же пользователь ABC решает изменить одно из своих голосов, поэтому он возвращается к вопросу Y, но вместо этого выбирает W вместо X. Следует избегать новой записи, а вместо нее старую должен быть обновлен с новым выбором.Вставить, заменить/обновить JDBC

Моих Голоса таблица содержит все голоса и пользователь и все варианты:

CREATE TABLE Votes(
    id integer, 
    username varchar(16), 
    option varchar(16) 
) 

Я пробовал различные методы каждый без успеха.

+0

Также есть таблица пользователей и сохраняйте только идентификатор пользователя в таблице голосов. Только голосовать за строку и пользователя. – jarlh

+0

id не является идентификатором пользователя, id в моем случае является идентификатором вопроса, на который проголосовал пользователь. – user2342352

+0

Я знаю. Я имел в виду store userid вместо имени пользователя. – jarlh

ответ

0

Я думаю, вы должны добавить еще одно поле в таблицу для вопроса.

Когда вы делаете это в своем приложении/базе данных, вы должны проверить, есть ли у этого пользователя строка с вопросом и ответом, если да, то обновите таблицу или вставьте ее, если строка не выходит.

+0

id в моей таблице - вопрос. Я просто использую идентификаторы вместо целого вопроса, делает его немного чистым. – user2342352

+0

Идентификатор имени не имеет ничего общего с вопросом и голосом в таблице. Но хорошо, теперь вы должны получить все из таблицы для своего пользователя и проверить его одинаково :) – amkz

0

Измените таблицу, как показано ниже:
CREATE TABLE votes ( id bigint(20) NOT NULL AUTO_INCREMENT, user_id bigint(20) DEFAULT NULL, question_id bigint(20) DEFAULT NULL, option varchar(255) DEFAULT NULL, PRIMARY KEY (id), UNIQUE KEY user_id (user_id,question_id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8

Перед тем, как вставить новую запись, вы должны проверить, если пользователь ответил на этот вопрос
select * from votes where user_id = ? and question_id = ? limit 1

Если есть запись существует, обновление его или вставить новую запись;

+0

как бы я это сделал? как, введя имя пользователя и вопрос в качестве единственного уникального ключа. – user2342352

+0

alter table Голоса добавляют уникальные (имя пользователя, вопрос); –

+0

OP не использует MySQL и в MySQL вы действительно можете использовать 'insert .. on duplicate' –

1

Прежде чем приступить к внедрению этих типов соединений с базами данных, это всегда хорошая практика мышления диаграммы, которая поможет вам и как организовать таблицы базы данных. Реляционный модуль - отличный и простой способ начать. Вы должны видеть, какие у вас есть сущности, в этом случае это пользователь и вопрос. Эти сущности будут представлять собой таблицу. Пользователь голосует по вопросу, и поскольку многие пользователи могут голосовать по каждому вопросу, и каждый пользователь может проголосовать по многим вопросам, отношения между этими субъектами «голосуют» также должны иметь таблицу. У нас есть 3 таблицы. Пользовательская таблица должна иметь свои идентификационные данные и пользовательские данные, которые, по вашему мнению, соответствуют первому ключу id. В таблице вопросов должны быть указаны идентификационные данные и пользовательские данные, которые, по вашему мнению, соответствуют его идентификатору в качестве первичного ключа. И на таблице голосования вы должны иметь идентификатор пользователя и идентификатор вопроса, на который он был проголосован, с любыми другими данными, которые вы должны иметь там. Идентификатор пользователя и идентификатор вопроса формируют здесь первичный ключ. Таким образом, выбирая таблицу голосования, вы сможете узнать, какой пользователь проголосовал за каждый вопрос, и какой вопрос был проголосован пользователем и т. Д.

Смежные вопросы