@gopromax

Как организовать систему like’ов?

Работаю над небольшим проектом немного похожим на Toster: есть вопросы и ответы, которые можно либо лайкать либо дислайкать. Лайки/дисклайки заносятся в table: user_id, answer_id, like/disklike.

И теперь хотелось бы сделать так чтобы когда user заходит на страницу с вопросом, like/dislike кнопки меняли цвет в зависимости от того нажимал ли их user до этого (идентично тостеру). Ожидается несколько ответов на странице и следовательно несколько like/dislike секций.

Подскажите пожалуйста как лучше и эффективней оформить вывод данных и запись на страницу для данной системы.

Проект написан на JS + PHP + MySQL.

UPD 2: Акцент вопроса = вывод данных.

Example

Имея следующие данные:
user = “Vasia”
question_id = “2014”

... мы вытягиваем из DB что именно наш Вася лайкал:
SELECT * FROM Votes WHERE user = "Vasia" AND question_id = “2014";

... и теперь пытаемся распихать это по:
<div class="answer" id="1">
  <div class=”like”>Like</div>
  <div class=”dislike”>Dislike</div>
</div>
...
<div class="answer" id="2">
  <div class=”like”>Like</div>
  <div class=”dislike”>Dislike</div>
</div>
...
<div class="answer" id="999">
  <div class=”like”>Like</div>
  <div class=”dislike”>Dislike</div>
</div>

Вопрос: как распихать эти данные наилучшим способом?
  • Вопрос задан
  • 3482 просмотра
Решения вопроса 2
Melkij
@Melkij
PostgreSQL DBA
Сделайте к выборке ответов
left join `table` on user_id=? and answer_id=answers.id


Соостветственно, в результат добавится поле с лайком. Если оно null - значит пользователь не голосовал.
Ответ написан
Комментировать
@maxfox
По существу обновленного вопроса:
Если вы делаете это в шаблонизаторе, то в цикле, выводя посты, обращайтесь к списку с лайками данного юзера и проверяйте. Условным оператором выставляйте нужный класс элементу.
Если вы работаете через AJAX, то получайте JSON, проходите по нему циклом и расставляйте нужные классы элементам JS'ом.

ЗЫ Рекомендую AJAX, по крайней мере в будущем. Это позволит закешировать страницы и не пересчитывать их при каждом запросе.

ЗЗЫ Не знаю, что у вас там в БД, но очень надеюсь, что вы храните суммарное значение лайков/дизлайков в таблице с ответами, а не считаете его каждый раз заново..
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@maxfox
А о чем вопрос? О модели данных, клиент-серверном взаимодействии или выводе на странице? Поле like/dislike по умолчанию 0. Меняем на 1 или -1 при действии.
Соответственно, если 0 - то один цвет, если не 0 - то другой.
Будете вы это делать AJAX'ом или в шаблоне - дело ваше.
Ответ написан
данные по ответам каким запросом получаете? в нем же и эти запросите
//например, если сейчас так
SELECT  title , content  FROM answers  WHERE  id = 5
сделать так:
SELECT  answers.title , answers.content , table.like/disklike ,  FROM answers , table WHERE answers.id= 5  and table.answer_id = answers.answer_id

вроде так..
просто до компа сейчас далеко, чтоб проверить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы