查询一下哪个会话同时有用户“貂蝉“和“西施“

发布时间:2024年01月21日
查询一下用户貂蝉和西施有没有在同一个会话里

可以使用以下SQL语句来查询用户"貂蝉"和"西施"是否在同一个会话中:

SELECT COUNT(DISTINCT chat_id) AS conversation_count
FROM pt_user_chat_relate
WHERE user_id IN (
    SELECT id
    FROM pt_user
    WHERE nickname = '貂蝉' OR nickname = '西施'
)
GROUP BY chat_id
HAVING COUNT(DISTINCT user_id) = 2;

这条SQL语句首先通过子查询找到用户"貂蝉"和"西施"的ID,然后在关联表中查找这两个用户共同参与的会话,并统计这些会话的数量。最后,通过HAVING子句筛选出只有这两个用户参与的会话。

查询一下哪个会话同时有用户"貂蝉"和"西施"
SELECT chat_id
FROM pt_user_chat_relate
WHERE user_id IN (
    SELECT id
    FROM pt_user
    WHERE nickname = '貂蝉' OR nickname = '西施'
)
GROUP BY chat_id
HAVING COUNT(DISTINCT user_id) = 2;

SELECT chat_id FROM pt_user_chat_relate WHERE user_id IN ( SELECT id FROM pt_user WHERE nickname = '貂蝉' OR nickname = '西施' ) GROUP BY chat_id HAVING COUNT(DISTINCT user_id) = 2;

请将上述语句用mybatis-plus的service方法写出来

以下是使用MyBatis-Plus的Service方法来实现上述SQL查询的示例:

@Service
public class UserChatRelateService extends ServiceImpl<UserChatRelateMapper, UserChatRelate> {

    public List<Integer> getCommonChatIdsForUsers(String user1, String user2) {
        List<Integer> chatIds = this.baseMapper.getCommonChatIdsForUsers(user1, user2);
        return chatIds;
    }
}

在这个示例中,假设已经定义了名为UserChatRelate的实体类和对应的Mapper类UserChatRelateMapper。在Service类中定义了一个方法getCommonChatIdsForUsers,该方法调用了UserChatRelateMapper中自定义的方法getCommonChatIdsForUsers,该方法的具体实现如下:

@Mapper
public interface UserChatRelateMapper extends BaseMapper<UserChatRelate> {

    @Select("SELECT chat_id FROM pt_user_chat_relate " +
            "WHERE user_id IN " +
            "(SELECT id FROM pt_user WHERE nickname = #{user1} OR nickname = #{user2}) " +
            "GROUP BY chat_id " +
            "HAVING COUNT(DISTINCT user_id) = 2")
    List<Integer> getCommonChatIdsForUsers(@Param("user1") String user1, @Param("user2") String user2);
}

在UserChatRelateMapper接口中使用了@Select注解来定义了SQL查询语句,该查询语句与之前提供的SQL语句相同。然后在UserChatRelateService中调用了该方法来获取同时包含用户"貂蝉"和"西施"的会话的chat_id列表。

能不能在不使用@Select、不写sql语句的情况下,单纯的靠mybatis-plus的service写出来
@Service
public class UserChatRelateService extends ServiceImpl<UserChatRelateMapper, UserChatRelate> {

    public List<Integer> getCommonChatIdsForUsers(String user1, String user2) {
        LambdaQueryWrapper<UserChatRelate> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.in(UserChatRelate::getUserId, 
            this.baseMapper.selectList(
                Wrappers.<User>lambdaQuery().select(User::getId)
                    .eq(User::getNickname, user1)
                    .or()
                    .eq(User::getNickname, user2)
            )
        );
        queryWrapper.groupBy(UserChatRelate::getChatId)
                    .having("COUNT(DISTINCT user_id) = 2");
        List<UserChatRelate> userChatRelates = this.baseMapper.selectList(queryWrapper);
        return userChatRelates.stream()
            .map(UserChatRelate::getChatId)
            .collect(Collectors.toList());
    }
}

文章来源:https://blog.csdn.net/qq_34879948/article/details/135730395
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。