You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写无重复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:24:26