基本上我有这个问题我有一个帖子表(在我的mysql数据库中)
Post{user_id, post, vote_up(int), vote_down(int)}
因为用户登录,然后他们投票,但我想检查用户是否已经投票,所以我不能让他们再次投票,显然我将使用用户会话来控制这个反对跟踪ips等。
所以我想我是否必须创建另一张桌子或者是更好的方法。
答案 0 :(得分:1)
您需要另一张表格,例如称为“投票”:
投票{user_id,post_id}
我认为,您的“发布”表格中有一个主键(例如“id”),您在上面的问题中没有显示?然后“post_id”应该是Post#id的外键。
/卡斯滕
答案 1 :(得分:0)
你肯定需要另一张桌子,一些主键和外键也会有用:
Post{post_id(int), user_id(varchar), post(clob)}
Votes{vote_id(int), post_id, user_id, up_down(char)}
您的vote_up和vote_down列值已删除,现在可以使用查询计算:
-- vote_up
select count(*) from votes where post_id = n and up_down = '+';
-- vote_down
select count(*) from votes where post_id = n and up_down = '-';
投票时应该有一个唯一的索引(post_id,user_id),以防止同一个用户在同一个帖子上多次投票。
不必定义主键vote_id,但每个表都应该有一个主键,如果您不想使用代理键,那么您可以使用与上面相同的列来定义PK,这将用作也是唯一索引,所以不必定义。