У меня есть 3 таблицы со следующими столбцами:Рейтинг: Как выбрать следующий элемент, для которого пользователь не голосовал еще
* users : user_id
* votes : user_id, creation_id
* creations : creation_id, creation_points
Каждый user
может проголосовать один раз для каждого creation
. Когда пользователь голос, это происходит:
- Таблица
votes
: Вставьте новую строку сuser_id
иcreation_id
(так что мы можем проверить, если пользователь уже голосовал за это создание) - Таблицы
creations
: Добавить +1 к строкаcreation_points
для соответствующего создания
Но теперь, я хочу, что когда пользователь успешно проголосовал за создание, она показывает ему следующий создание, для которого он еще не голосовать. Как я могу это достичь?
Я попробовал этот путь:
- Выберите следующий
creation_id
изcreations
таблицы (гдеcreation_id
больше, чем текущийcreation_id
) - Проверьте, если пара
creation_id
&user_id
уже существует вvotes
таблице. Если он существует, повторите попытку из 1).
Проблема с этим методом заключается в том, что ему нужно много запросов, если пользователь уже проголосовал за следующее создание. Он также создает бесконечный цикл, если он уже голосовал за все творения. Есть ли другие альтернативы?