@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>

Вопрос: как распихать эти данные наилучшим способом?
  • Вопрос задан
  • 3483 просмотра
Решения вопроса 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

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

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

Войти через центр авторизации
Похожие вопросы
SummerWeb Ярославль
от 120 000 до 180 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
Brightdata Тель-Авив
от 5 500 до 6 500 $
18 июн. 2024, в 18:49
1000 руб./в час
18 июн. 2024, в 18:04
10000 руб./за проект