[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как организовать архитектуру базы для системы рейт
Kaufmann
Привет! Делаю систему оценки статей на сайте. Она простенькая: нравится - нажимаешь "+", а нет "-". Но надо как-то грамотно учесть, что пользователь может оценивать одну и туже стаю только один раз.

Подскажите пожалуйста, как организовать архитектуру базы данных под эту задачу?
Valick
а в чем проблема? просто делаете уникальный индекс (можно примари) на два поля которые содержат id статьи и id пользователя, еще одно поле в котором храните оценку

_____________
Стимулятор ~yoomoney - 41001303250491
Kaufmann
Нет проблемы! Просто прошу совет как это сделать по фэншую.. а то так большой объем таблицы потенциально получается..
Zzepish
news_id|user_id|point

где point- boolean (т.е. 1 или 0)


А адлее= SELECT * FROM news (или чего у тебя там) WHERE news_id='$n_id' AND user_id='$u_id' AND point=1 (проверка на то, ставил ли юзер оценку)
Kaufmann
Уже сделал, спасибо!
Valick
Zzepish, а вы уверены что пользователь поставил единичку? :)
В данном случае при примари кей на два поля можно не проверять, а использовать INSERT ON DUPLICATE KEY UPDATE

INSERT INTO `table` SET `point` = $p, `user_id` = $uid, `news_id` = $nid  ON DUPLICATE KEY UPDATE `point` = $p


_____________
Стимулятор ~yoomoney - 41001303250491
Zzepish
Valick
А! Да, я тупанул!


Тогда не boolean, а tinyint и -1,0,1
Valick
Zzepish, да про тип это фигня, я про логику проверки, вы проверили только "плюс", на "минус" (это тоже результат) при вашем подходе нужен еще один запрос, но можно проверять одним если использовать конструкцию IS NOT NULL

Но и до этого дело не доходит, при применении ON DUPLICATE KEY
нам вообще без разницы есть там оценка или нет, если нет то вставим, если есть то обновим


_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.