gpt4 book ai didi

php - 没有获得正确数量的赞成票和反对票

转载 作者:行者123 更新时间:2023-11-29 04:05:03 26 4
gpt4 key购买 nike

我的 SQL 语句有问题。我有一个 jQuery upvote 插件,它在我的数据库中保存 true 和 false 值。如果用户按下 upvote 它将在 upvote volume 中保存 true,如果用户按下 vote 它将在 down vote 列中保存 true 如果用户在已经 upvoted 主题上按下 downvote 它将在 downvote 列中保存 true,在 upvote 列中保存 false。我知道这有点令人困惑。此外,对新主题进行投票将导致在您单击的相对列中保存 0。问题是

enter image description here enter image description  here

Fig 1: when clicked up  |Fig 2: when clicked down

enter image description here

但是当我刷新页面时,数字仍然是 0

我的 SQL 查询:

SELECT
SUM(
IF(Upvote='true' AND Downvote='false',1,
IF(upvote='false' AND Downvote='true',-1,
IF(Upvote='false' AND Downvote='false',-1,
IF(Downvote='false',1,
IF(Downvote='true' AND (Upvote='0' OR Upvote=false),-1,0)
)
)
)
)) as `votes`

来自评级WHERE TopicD = :current

最佳答案

为了正确记录投票,您需要 3 条信息,

  1. 投票的主题是什么。
  2. 谁投票了。
  3. 投票是赞成还是反对

这需要多对多关系。许多用户可以对许多主题进行投票。这么说有帮助,看看有没有道理。

例如,我们不能说,许多用户可以对一个主题进行投票。因为我假设您计划讨论不止一个主题。而且我们不能说许多主题将由 1 个用户投票。这些都没有多大意义。

多对多关系需要 3 个表。所以你有这个

users
id
//and other stuff

topics
id
//and other stuff

votes
user_id
topic_id
value (1 or -1)
//and other stuff, you could put the time for example

然后你可以简单地对一个主题进行计数

SELECT
sum(value)
FROM
votes
WHERE
topic_id = 1

然后您只需将 value 向上或向下翻转或删除 0 的记录。

您可以判断用户是否对问题进行了投票以及如何投票

SELECT
value
FROM
votes
WHERE
topic_id = 1 --current topic
AND
user_id = 20 --current user

对于用户,您将得到 no record-11。然后设置按钮的状态就很简单了。

您不能将数据强加到它不适合的模型中。数据决定了它需要的关系。当您找到合适的人时,您就会知道,因为一切都变得微不足道。

最后一件事你应该让 votesuser_idtopic_id 上有一个组合的唯一键。这样用户就不能对同一主题进行 2 次投票

topic_id, user_id
1 1 //ok
1 2 //ok
2 1 //ok
// 1 1 - this violates the unique constraint

如果您不知道该怎么做,请在 PHPmyAdmin 的结构选项卡中,选中每个字段旁边的复选框,然后在下面有一些按钮,上面写着唯一,只需单击它。 (不是行上的那个,而是在下面的那个)。它甚至可以是主键,但是有一个单独的代理键参数(自动递增 id)

关于php - 没有获得正确数量的赞成票和反对票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49745294/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com