如何编写无重复SQL查询,判断用户对评论的点赞/点踩状态?
解决方案
首先,核心的SQL查询可以这样写,确保只返回当前用户对指定评论的操作状态,且无重复结果:
SELECT value FROM your_table_name WHERE the_comment_liked = :target_comment_id AND user_who_liked = :current_user_id LIMIT 1;
关键细节说明:
- 精准条件过滤:通过
the_comment_liked(目标评论ID)和user_who_liked(当前用户ID)两个条件,直接定位到我们关心的那条记录,不需要查询无关数据。 - LIMIT 1:强制只返回一条结果——即使数据库里意外出现了重复记录(比如没加约束的情况),也不会影响后续PHP的判断逻辑。
从根源避免重复数据(推荐)
为了彻底防止一个用户对同一条评论重复点赞/点踩,建议给数据表添加联合主键,这样数据库层面会直接阻止重复插入:
ALTER TABLE your_table_name ADD CONSTRAINT unique_user_comment_like PRIMARY KEY (the_comment_liked, user_who_liked);
添加这个约束后,同一个用户对同一条评论只能有一条操作记录,查询时自然不会有重复结果。
配合PHP的处理逻辑示例
拿到查询结果后,你可以这样判断并设置高亮类:
// 假设使用PDO进行数据库操作 $stmt = $pdo->prepare("SELECT value FROM your_table_name WHERE the_comment_liked = ? AND user_who_liked = ? LIMIT 1"); $stmt->execute([$targetCommentId, $currentUserId]); $userAction = $stmt->fetch(PDO::FETCH_ASSOC); $likeBtnClass = ''; $dislikeBtnClass = ''; if ($userAction) { // 根据value的值区分点赞/点踩,这里假设1=点赞,-1=点踩,你可以根据实际定义调整 switch ($userAction['value']) { case 1: $likeBtnClass = 'highlighted'; break; case -1: $dislikeBtnClass = 'highlighted'; break; } }
这样就能轻松实现按钮的高亮状态判断啦~
内容的提问来源于stack exchange,提问作者SomeBeginner
相关产品推荐
相关产品推荐

