mysql - 每个用户 ID 的唯一产品 ID 的更新率

标签 mysql sql

我将在我自己的 SQL 上实现一个方法。我在 MySQL 中有两个表。假设 FirstTable 中的每一行都已更新,并且 ratecountView 的值是可变的,我尝试使用相同的命令:

 UPDATE FirstTable SET `countView`= `countView`+1,
                             `rate`=('$MyRate' + (`countView`-1)*`rate`)/`countView`
                             WHERE `productId`='$productId'

第一个表:

  productId | countView | rate |     other column  |
------------+-----------+------+-------------------+---
      21    |      12   |   4  |      anything     |
------------+-----------+------+-------------------+---
      22    |      18   |   3  |      anything     |
------------+-----------+------+-------------------+---    

但通过这种方式,用户可以随时投票。因此,我尝试创建一个包含两列 productIduserID 的表。如下所示:

第二个表:

  productId |      userID   | 
------------+---------------|
      21    |      100001   |  
------------+---------------|
      22    |      100002   |   
------------+---------------|
      21    |      100001   |  
------------+---------------|
      21    |      100003   |   
------------+---------------|

现在,如 SecondTable 中给出的示例所示,用户对某个 ProductId 投了两票。所以我不希望这两个投票都被记录。

此方法的问题:

  1. 计数器的值会添加到每次投票中。
  2. 我无法正确链接 SecondTableFirstTable 来管理 FirstTable 的更新。

当然,这个问题可能并不是全新的,但我进行了很多搜索才得到正确的答案。该网站的一个问题就是通过这种方法提出的。使用此方法,您可以管理表的更新。该方法如下:

UPDATE `FirstTable` SET `countView`= `countView`+1,
                        `rate`=('$MyRate' + (`countView`-1)*`rate`)/`countView`
    WHERE `productId`='$productId' IN ( SELECT DISTINCT productId, userID
    FROM SecondTable)

但是下一个问题是,即使我使用这个命令,我也会遇到以下错误:

1241 - Operand should contain 1 column(s)

如果您能指导我,非常感谢。我确信我的问题不会重复...再次感谢您。

最佳答案

这解决了您的特定语法问题:

UPDATE FirstTable
    SET countView = countView + 1,
        rate = ($MyRate + (countView - 1) * rate) / countView
    WHERE productId = $productId AND
          productId IN (SELECT t2.productId FROM SecondTable t2);

但是,如果两个不同的用户对同一产品进行投票,则 FirstTable 将仅更新一次。目前尚不清楚这是否是有意行为。

请注意,子查询中不需要SELECT DISTINCT

关于mysql - 每个用户 ID 的唯一产品 ID 的更新率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48856888/

相关文章:

sql - 如何获得与Oracle SQL中的正则表达式匹配的字符串的一部分

php - 将字符串与 MySQL 列进行比较

php mysql 在十个表+不同列上构建搜索查询

自动生成数据的 MySql 列,比 UUID 长

sql - 如果更新....Where 不影响任何行,是否创建了任何锁?

sql - "With recompile"是否重新编译存储过程中的所有查询?

php - 使用 $wpdb->insert 将错误数据插入数据库

MySQL 外键和外部参照表

python - 使用 Python 将 PostgreSQL 查询导出到 csv 文件

sql - 报告服务 - 跨不同数据库使用相同的报告