Вы сказали:
было бы хорошо, если есть умный способ, которым я мог бы иметь систему рейтинга 5 звезд, которая помнит пользователей и может отображать в среднем значение все в 1 таблице вместе с информацией.
У вас уже есть таблица пользователей. Единственный способ «запомнить» пользователя, голосовавшего за игру, - это FK для идентификатора пользователя. Теперь, если у вас есть одна таблица смешивания пользователей и игр, то ваша таблица будет недоставать нормализации и будет иметь вид:
+--------+----------------+------------------------+--------+------+
| GameId | GameName | GameDescription | User | Vote |
+--------+----------------+------------------------+--------+------+
| 1 | Counter Strike | An addicting FPS game! | Timmy | 3 |
| 1 | Counter Strike | An addicting FPS game! | Martin | 5 |
| 1 | Counter Strike | An addicting FPS game! | Moe | 2 |
| 2 | Halo | Other addicting game | Timmy | 2 |
| 2 | Halo | Other addicting game | Sonny | 2 |
+--------+----------------+------------------------+--------+------+
И это не очень нормализуется ... На самом деле, ты собираешься иметь GameDescription и GameName повторен везде! В этом случае ваш ПК будет GameId и User. Вы пожалеете об этом рано или поздно. Итак, давайте не будем этого делать. Перейти на это:
Игры (PK: GameID)
+--------+----------------+------------------------+
| GameId | GameName | GameDescription |
+--------+----------------+------------------------+
| 1 | Counter Strike | An addicting FPS game! |
| 2 | Halo | Other addicting game |
+--------+----------------+------------------------+
Пользователи (PK: Пользователь)
+--------+
| User |
+--------+
| Timmy |
| Martin |
| Moe |
+--------+
Голосов (PK: GameID и пользователя)
+--------+--------+------+
| GameId | User | Vote |
+--------+--------+------+
| 1 | Timmy | 3 |
| 1 | Martin | 5 |
| 1 | Moe | 2 |
| 2 | Timmy | 2 |
| 2 | Sonny | 2 |
+--------+--------+------+
Примечание: Я предполагаю, что имя пользователя - это ПК, вы также можете использовать целочисленный userId, но это было легче читать.
Я знаю, что присоединяется, но они помогут вам больше, чем они причинят вам боль.
Теперь, как вы можете улучшить средний расчет? Ну, для каждой игры у вас может быть еще один столбец, такой как TotalVotes
, который будет содержать общее количество голосов и другой столбец SumVotes
, который будет содержать сумму всех голосов за эту игру. Таким образом, когда число голосов увеличивается на один столбец TotalVotes, и вы добавляете в SumVotes количество запусков, которые пользователь назначил игре.
Затем, чтобы отобразить среднее, просто выполнить разделение обоих значений (это гораздо быстрее, чем соединения и просмотра таблиц пересчитывать это.
Ну, я надеюсь, что это помогает или направлять вас к лучшему решению Удачи!
С системой, которую вы предлагаете, как вы узнаете, если пользователь уже оценил игру? Или как они смогут изменить свой рейтинг? – Tim
хорошо, о котором я сказал, что им известно (что требует 2 таблицы), пользовательский идентификатор хранится с их голосом, но im спрашивает, знает ли кто-нибудь больше о mysql, чем я, и может предложить способ сделать это в другой таблице. Вероятно, is not, но идентификатор цифры ask. – brybam
Попробуйте уточнить свой вопрос немного больше. Я думаю, вы, возможно, не совсем четко определили свой конечный результат. Взгляните на образцы ниже и попробуйте их. Сообщите нам свои проблемы. –