Комментарии с голосами(как на Хабре)

Benderlio

Новичок
Комментарии с голосами(как на Хабре)

Добрый день.
Необходимо реализовать подобную систему

есть 2 таблицы: комментарии comm(comm_id, user_id, comm_text) и голоса за эти комментарии rate(comm_id,rate_id,user_id,rate)

необходимо выбрать сумму голосов + если данный пользователь не голосовал то дать ему такую возможность, а если голосовал то блоктровать.

т.е. если 2-мя запросами то так

SELECT SUM(`comment_to_user_rate`) as sum
FROM `comment_to_user`
WHERE comment_id=38

SELECT user_id
FROM `comment_to_user`
WHERE user_id=4 and comment_id=38

возможен ли вариант с одним запросом?
Спасибо.
 

Groove

Новичок
возможно, если сделать кэш суммы голосов прямо в таблице комментарии например, который будет изменяться при голосовании, а также при вывод делать LEF JOIN с таблицей голосов на предмет поиска отданного голоса за комментарий.

итого:
КОММЕНТАРИИ
comm(comm_id, user_id, comm_text,comm_cache_sum)

ГОЛОСА
rate(comm_id,user_id,rate_value)
первичный ключ:comm_id,user_id,
а rate_value имеет значения -1 или +1

сам запрос:
select comm.*,rate.rate_value from comm
left join rate on (comm.comm_id=rate.comm_id and rate.usr_id=123)

где 123 - идентификатор пользователя

в этом случае при выводе смотрим, если rate_value is null, значит не голосовал
 
Сверху