【问题标题】:SQL regularly counting all new votes in one table and incrementing a total count value in anotherSQL 定期计算一个表中的所有新投票并增加另一个表中的总计数值
【发布时间】:2017-08-21 10:35:13
【问题描述】:

我有三张表,一张是用户制作的关卡,另外两张表用于对上述关卡进行投票和否决。

我现在有近 1000 万张选票,并且在必要时计算一个级别的所有选票变得非常缓慢,因此我计划在级别表上添加两列,分别计算赞成票和反对票,服务器可能每 24 小时更新一次。

很遗憾,投票表没有自动递增的主键列,而是主键是 mapid 和 userid 的组合,因此一个用户不能为同一个地图投票两次。

所以我在投票表中添加一列“计数”,如果尚未添加到聚合数据中,则为 0,如果已添加,则为 1。这样我就不需要重新计算所有已添加到聚合数据中的投票,只需重新计算新的投票即可。

我的查询需要:

-选择所有计票为0的选票

-从该行获取mapid,并在levels表中增加该mapid的thumbsup计数

-将该票设为 1

我正在使用 MySQL。非常感谢所有帮助!

Table maps_thumbsup
userid | mapid | counted

Table maps_thumbsdown
userid | mapid | counted

Table maps
id | authorname | leveldata | ... | thumbsupcount | thumbsdowncount

【问题讨论】:

  • 你的数据库结构是什么,到目前为止你尝试了什么?
  • 包含模式或表表示将有助于回答您的问题
  • Schema 会很有帮助。听起来你也可以从使用一些独特的索引中受益。您是否已针对性能调整 MySQL 或使用默认值?
  • 添加了一些关于表格结构的信息,有帮助吗?我没有做太多改变,我相信它基本上是默认的

标签: php mysql database count


【解决方案1】:

你的主桌不是已经有票数了吗? T

able maps_thumbsup
userid | mapid | counted

Table maps_thumbsdown
userid | mapid | counted

Table maps
id | authorname | leveldata | ... | thumbsupcount | thumbsdowncount

所以每次有人投票时,只需使用 mysql 中的 set 命令“set thumbsup = thumbsup + 1”,如果它没有那 2 列然后添加它,你能给我发送你的接口类型 mysql / mysql / DBO我可以更新我的答案帖子代码以计算并将计数插入到新创建的列中,无需每次从数据库中获取单个值时计算所有选票,然后您可以使用这种方式来获得选票

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    相关资源
    最近更新 更多