Mysql 每个用户ID的唯一productId更新率
我将在我自己的SQL上实现一个方法。我在MySQL中有两个表。假设Mysql 每个用户ID的唯一productId更新率,mysql,sql,Mysql,Sql,我将在我自己的SQL上实现一个方法。我在MySQL中有两个表。假设FirstTable中的每一行都被更新,并且rate和countView的值是可变的,我尝试使用相同的命令更新它们: UPDATE FirstTable SET `countView`= `countView`+1, `rate`=('$MyRate' + (`countView`-1)*`rate`)/`countView`
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
。当然!很高兴我能帮忙。:)当然可以很高兴我能帮忙。:)谢谢,不,我不打算考虑用户的投票。那么,新的问题应该如何解决呢?谢谢,不,我不打算考虑用户的投票。那么,新问题应该如何解决呢?