我将在我自己的 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 |
------------+---------------|
现在,如 SecondTable
中给出的示例所示,用户对某个 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 - 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/