частота обновления для уникального идентификатора продукта каждым пользователем

0

Я собираюсь реализовать метод на моем собственном 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, пользователь дал произведению два голоса. Поэтому я не хочу, чтобы оба этих голоса были записаны.

Проблемы с этим методом:

  1. Значение счетчика добавляется к каждому голосу.
  2. Я не могу правильно связать 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 столбец (столбцы)

Так что большое вам спасибо, если вы можете вести меня. И я уверен, что мой вопрос не дублируется... еще раз спасибо.

Теги:

2 ответа

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 не требуется в подзапросе.

  • 0
    Спасибо. Нет, я не собираюсь рассматривать голос пользователя. Так как же решить новую проблему?
1

Ошибка генерируется, потому что вы не можете вернуть 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

  • 0
    Спасибо, видимо, вы решили мою проблему. ты великолепен...
  • 0
    Конечно, вещь! Рад, что смог помочь. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню