Я собираюсь реализовать метод на моем собственном 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
, пользователь дал произведению два голоса. Поэтому я не хочу, чтобы оба этих голоса были записаны.
Проблемы с этим методом:
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 столбец (столбцы)
Так что большое вам спасибо, если вы можете вести меня. И я уверен, что мой вопрос не дублируется... еще раз спасибо.
Это фиксирует вашу специфическую проблему синтаксиса:
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
не требуется в подзапросе.
Ошибка генерируется, потому что вы не можете вернуть 2 поля в оператор "in". Вы хотите использовать группу:
Пытаться:
IN ( SELECT DISTINCT productId FROM rating group by product, UserID)
Вот документация для поиска для группы mysql, если вы хотите: https://dev.mysql.com/doc/refman/5.7/en/group-by-handling.html