Как хранить идентификаторы для рейтинговой системы?

все

Мне нужна быстрая помощь о том, как сохранить идентификаторы оценщика в базе данных mysql, чтобы использовать их в сценарии php. например, у меня есть сценарий звездного рейтинга php, и я хочу, чтобы, когда кто-то оценивает профиль, его / ее идентификатор должен храниться в базе данных, чтобы проверить, проголосовали ли они уже. Как я могу сохранить его в одном столбце с идентификатором профиля другого оценщика. Структура базы данных такая

    user_id | rated_value | rated_count | raters_id

Здесь user_id - это идентификатор профиля, который оценивается. Rated_value - это общее значение всех голосов. Rated_count - это количество общих оценок, когда-либо выставляемых для определенного профиля. а raters_id - это идентификаторы всех оценщиков, которые оценили этот профиль.

теперь я хочу проверить, был ли идентификатор профиля уже оценен профилем с помощью php. Я слышал о списках идентификаторов, разделенных запятыми, но это хорошая идея. И как я могу проверить php, если идентификатор уже имеет рейтинг профиля, если я использую список, разделенный запятыми.

Спасибо за вашу помощь.


person Prashank    schedule 18.03.2012    source источник


Ответы (1)


Вам нужно всего 3 столбца:

user_id | rated_value | rater_id

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

Чтобы получить общий рейтинг для user_id = 1, используйте функции агрегирования и группировки в MySQL:

SELECT 
    AVG(rated_value) as average_rating, 
    COUNT(*) AS number_of_votes 
FROM 
    user_rating 
WHERE
    user_id = 1
GROUP BY
    user_id

Чтобы проверить, имеет ли rater_id = 3 рейтинг user_id = 1, используйте простой запрос

SELECT rated_value FROM user_rating WHERE user_id = 1 AND rater_id = 3

И проверьте, возвращает ли он какие-либо результаты

person dev-null-dweller    schedule 18.03.2012
comment
но все же, как я могу сохранить rater_id в базе данных, потому что будет много идентификаторов, которые будут оценивать профиль - person Prashank; 18.03.2012
comment
В моем решении каждая строка в user_rating предназначена для каждого голосования, поэтому, если два пользователя будут оценивать user_id=1, будут две строки с user_id=1, и оба они будут иметь разные rater_id. - person dev-null-dweller; 18.03.2012
comment
хорошо, но можете ли вы представить себе другую таблицу для хранения rater_id. Является ли это возможным? - person Prashank; 18.03.2012
comment
Да, это возможно, и вы должны понять это из моего ответа. - person dev-null-dweller; 18.03.2012