2009-10-14 2 views
1

Я бы хотел, чтобы мои пользователи могли оценивать каждый элемент сайта с 1 до 5. Они также должны быть в состоянии вернуться и пересмотреть свой рейтинг для каждого элемента, как им заблагорассудится. Наконец, на странице элемента будет отображаться средний рейтинг всех пользовательских рейтингов при просмотре.mysql - рейтинг пользователей, 1 рейтинг для пользователя, обновляемый - структура таблицы?

Что касается PHP, я думаю, что смогу справиться с этим. С чем я борюсь, представляет собой логический набор таблиц для обработки вышеизложенного?

Я думал только ваш стандарт:

ID | ITEM## | USERID | RATING 

дизайна таблицы, но чувствуем, что возвращение и постоянно проверять, если пользователь уже оценил данный пункт прежде, и возвращение результата каждый раз, когда они считают, что пункт , сделало бы для довольно медленного набора скриптов ... тем более, что счетчик товаров & растет со временем.

Есть ли у кого лучшая таблица (-ы) идея планировки для такого рода ситуаций? Мы смотрим на более 1500 предметов с момента запуска и регулярно добавляем их в будущем, поэтому таблица на элемент немного чрезмерна, не так ли?

Спасибо!

ответ

5

Это лучший способ сделать это. Это называется отношением многих-многих. У вас много пользователей и много предметов. Один пользователь может оценивать многие элементы, и один элемент может оцениваться многими пользователями.

Вместо того, чтобы указать поле идентификатора в предложенной таблице, поместите ключ в ПУНКТ и ПОЛЬЗОВАТЕЛЬ. Таким образом, пользователь может только оценивать элемент один раз. Если вы попытаетесь оценить его дважды, вы получите сообщение об ошибке. Также индексируйте оба этих поля, чтобы ускорить поиск таблицы.

2

Я бы сказал, создавая уникальный индекс над ITEM и USERID, и обновление строк с помощью «REPLACE INTO» должно работать. Я бы сильно отговорил вас сделать таблицу за элемент, чтобы сэкономить немного нагрузки.