2014-09-07 2 views
0
CREATE TABLE IF NOT EXISTS `User_Rep` (
    `ID` int(11) NOT NULL AUTO_INCREMENT, 
    `USER_ID` int(11) NOT NULL, 
    `REPPER_USER_ID` int(11) NOT NULL, 
    `REP` tinyint(4) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`ID`) 
) 

Это моя текущая таблица, пожалуйста, игнорируйте отсутствующий внешний ключ для user_id, просто не добавляйте их для краткости.«Репутационная система пользователя» - проверка того, имеет ли пользователь +1 +1 кого-то?

Когда пользователь решает респ кого-то новая запись добавляется в эту таблицу, то есть

INSERT INTO `User_Rep` (`ID`, `USER_ID`, `REPPER_USER_ID`, `REP`) VALUES 
(1, 72, 3, 1), 
(2, 72, 3, 1), 
(3, 72, 3, -1); 

И я могу вытащить какой-либо конкретной пользователи респ с помощью следующего запроса:

SELECT SUM(REP) FROM User_Rep WHERE USER_ID = 72 

Однако , я изо всех сил пытаюсь разработать соответствующий запрос для выяснения того, был ли конкретный пользователь уже включен или заблокирован пользователем, так что пользовательский интерфейс может соответствующим образом реагировать и выполнять соответствующее действие (голосование или проголосовать)

Что происходит, когда пользователь поднимает, уменьшает, снова поворачивает и т. Д. ... и теперь есть несколько строк в таблице? Как я могу найти только соответствующие True/False?

Любая помощь с этим?

+0

В этом простом случае уникальный индекс (user_id, repper_user_id) будет делать. Но если бы это было так, как здесь, в SO, вы должны добавить еще один столбец. – VMai

ответ

0

Первый - изменить таблицу. Я бы удалил существующий столбец ID и создаю индекс UNIQUE в полях USER_ID и REPPER_USER_ID. Это будет препятствовать тому, чтобы база данных позволяла дублировать в первую очередь, а также значительно ускорит следующую часть.

Затем в коде, так что вы можете предотвратить/функциональную кнопку вотум от того, имеются:

SELECT 1 FROM `User_Rep` WHERE `USER_ID`=72 AND `REPPER_USER_ID`=3 

Чтобы получить фактический голос от 3 до 72, было бы:

SELECT `REP` FROM `User_Rep` WHERE `USER_ID`=72 AND `REPPER_USER_ID`=3 

Но быть осторожно, как вы используете это в коде ... если вы выполните простой тест «if true», вы можете получить -1 или 0, а затем любая истинная/ложная оценка вернет FALSE, даже если она установлена ​​(ноль и отрицательный результат обычно переводится на «false».

Присвойте этому свойству/переменной код, затем вы можете выполнить свой код проверки, чтобы проверить его. Зависит от того, что вы используете:

Python:

if has_voted: 
    ... 

PHP

if(has_voted==TRUE) { 
    ... 
} 
+0

Как я узнаю, является ли это голосование +1 или -1? например Если пользователь имеет преимущество, вместо этого уменьшите их (один голос на пользователя) – Broak

+0

Это совершенно другой вопрос. Я опубликовал решение для проверки того, имеет ли пользователь 3 уже (вверх | вниз) голосующий пользователь 72. Я обновил свой ответ. –

+0

hd1, почему бы не удалить ID? Это лишний, если пользователь уже проголосовал? (если вам не разрешено несколько голосов, и в этом случае мало смысла иметь голос вверх/вниз ... у вас может быть просто один голос с добавочным/уменьшающимся значением. –

Смежные вопросы