我要在自己的SQL上实现一个方法。我在MySQL中有两个表。假设每行都在FirstTable
中更新,而rate
和countView
的值都是可变的,我尝试使用相同的命令更新它们:
UPDATE FirstTable SET `countView`= `countView`+1,
`rate`=('$MyRate' + (`countView`-1)*`rate`)/`countView`
WHERE `productId`='$productId'
FirstTable:
productId | countView | rate | other column |
------------+-----------+------+-------------------+---
21 | 12 | 4 | anything |
------------+-----------+------+-------------------+---
22 | 18 | 3 | anything |
------------+-----------+------+-------------------+---
但是这样,用户每次都可以投票。所以我尝试创建一个包含两列productId
和userID
的表格。如下所示:
SecondTable:
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 - 操作数应包含1列
非常感谢你,如果你能指导我的话。而且我确定我的问题不重复......再次感谢你。
答案 0 :(得分:1)
正在生成错误,因为您无法在“in”语句中返回2个字段。您将要使用group by:
尝试:
IN ( SELECT DISTINCT productId FROM rating group by product, UserID)
如果需要,可以在此处查看mysql组的文档:https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html
答案 1 :(得分:1)
这可以解决您的特定语法问题:
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
不。