Допустим, у нас есть три комментария к одному и тому же сообщению:
Первая таблица: комментарии
id | post_id | comment
1 | 1 | "something"
2 | 1 | "something else"
3 | 1 | "something else entirely"
Вторая таблица: comment_likes
id | comment_id
1 | 2
2 | 2
3 | 3
В этом примере комментарий 2 будет иметь 2 лайка, а комментарий 3 - один.
Это может быть код для отображения наших комментариев. Хитрость заключается в том, чтобы добавить пользовательский атрибут в ссылку like, чтобы мы могли определить идентификатор комментария в javascript.
<div class="comments">
<?php
$res = mysql_query('SELECT * FROM `comments` WHERE `post_id` = '.$post_id.';');
while ($row = mysql_fetch_array($res)) {
$cid = $row['id'];
echo '<div class="comment">';
echo $row['comment'].'<br />';
echo '<span class="like" comment-id="'.$cid.'">Like</span>';
$lres = mysql_query('SELECT COUNT(*) FROM `comment_likes` WHERE `comment_id` = '.$cid.';');
$likes = mysql_result($lres,0);
echo '<span class="likes">';
if ($likes > 0) {
echo '<span class="num_likes">'.$likes.'</span>';
$p = ($likes > 1) ? 'people like' : 'person likes';
echo $likes.' '.$p.' this';
}
echo '</span>';
echo '</div>';
}
?>
</div>
Теперь JavaScript (с использованием jQuery):
$(document).ready(function() {
$('.like').click(function() {
var id = $(this).attr('comment-id');
$.ajax({
url: 'add_like.php',
method: 'POST',
data: {'id':id},
success: function(res) {
if (res === '1') {
var likes = $('.like[comment-id='+id+']').find('.num_likes').text();
likes++;
var p = likes > 1 ? 'people like' : 'person likes';
var html = '<span class="num_likes">'+likes+'</span> '+p+' this';
$('.like[comment-id='+id+']').find('likes').html(html);
}
else alert('Error Liking Comment');
},
error: function() { alert('Error liking comment'); }
});
});
});
И PHP (для AJAX) - add_like.php
<?php
if (!isset($_POST['id'])) exit;
$id = $_POST['id'];
// connect / select db
$res = mysql_query('INSERT INTO `comment_likes` WHERE `comment_id` = '.$id.';');
if ($res) {
die(1); // success
}
die(0);
?>
Очевидно, что вы хотели бы расширить это для симпатии / неприязни - потому что в данный момент пользователю может нравиться несколько раз, но вы понимаете.