Mysql 每个用户ID的唯一productId更新率

Mysql 每个用户ID的唯一productId更新率,mysql,sql,Mysql,Sql,我将在我自己的SQL上实现一个方法。我在MySQL中有两个表。假设FirstTable中的每一行都被更新,并且rate和countView的值是可变的,我尝试使用相同的命令更新它们: UPDATE FirstTable SET `countView`= `countView`+1, `rate`=('$MyRate' + (`countView`-1)*`rate`)/`countView`

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

 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     |
------------+-----------+------+-------------------+---    
但通过这种方式,用户可以随时投票。因此,我尝试创建一个包含两列的表
productId
userID
。如下图所示:

第二表:

  productId |      userID   | 
------------+---------------|
      21    |      100001   |  
------------+---------------|
      22    |      100002   |   
------------+---------------|
      21    |      100001   |  
------------+---------------|
      21    |      100003   |   
------------+---------------|
现在,正如
第二个表中给出的示例一样,用户对productId投了两票。所以我不希望这两张选票都被记录下来

此方法存在的问题:

  • 计数器的值将添加到每一票中
  • 我无法正确链接
    SecondTable
    FirstTable
    以管理
    FirstTable
    的更新
  • 当然,这个问题可能并不完全是新问题,但为了得到正确答案,我搜索了很多。这个网站的一个问题就是通过这个方法提出的。使用此方法,可以管理表的更新。该方法如下:

    UPDATE `FirstTable` SET `countView`= `countView`+1,
                            `rate`=('$MyRate' + (`countView`-1)*`rate`)/`countView`
        WHERE `productId`='$productId' IN ( SELECT DISTINCT productId, userID
        FROM SecondTable)
    
    但下一个问题是,即使使用此命令,我也会遇到以下错误:

    1241-操作数应包含1列
    所以,如果你能指引我,非常感谢你。我相信我的问题不会重复。。。再次感谢。

    由于无法在“in”语句中返回2个字段,因此生成了错误。您将希望通过以下方式使用组:

    尝试:


    如果您愿意,可以查看以下mysql group by文档:

    正在生成错误,因为您不能在“in”语句中返回2个字段。您将希望通过以下方式使用组:

    尝试:


    如果您愿意,可以查看以下mysql group by文档:

    这修复了您的特定语法问题:

    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

    这修复了您的特定语法问题:

    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

    当然!很高兴我能帮忙。:)当然可以很高兴我能帮忙。:)谢谢,不,我不打算考虑用户的投票。那么,新的问题应该如何解决呢?谢谢,不,我不打算考虑用户的投票。那么,新问题应该如何解决呢?