From 80fcd4e9643affce7a9c9ab2d4a2611eb4fdff63 Mon Sep 17 00:00:00 2001 From: "1808837298@qq.com" <1808837298@qq.com> Date: Mon, 6 Jan 2025 15:20:38 +0800 Subject: [PATCH] Enhance user search functionality to support ID and keyword searches. Updated query conditions to allow searching by user ID alongside username, email, and display name. Improved handling of numeric and string keywords in search queries. --- model/user.go | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/model/user.go b/model/user.go index 1b159ba7..95123c21 100644 --- a/model/user.go +++ b/model/user.go @@ -134,18 +134,23 @@ func SearchUsers(keyword string, group string, startIdx int, num int) ([]*User, // 构建基础查询 query := tx.Unscoped().Model(&User{}) + // 构建搜索条件 + likeCondition := "username LIKE ? OR email LIKE ? OR display_name LIKE ?" + // 尝试将关键字转换为整数ID keywordInt, err := strconv.Atoi(keyword) if err == nil { - // 如果转换成功,按照ID和可选的组别搜索用户 + // 如果是数字,同时搜索ID和其他字段 + likeCondition = "id = ? OR " + likeCondition if group != "" { - query = query.Where("id = ? AND "+groupCol+" = ?", keywordInt, group) + query = query.Where("("+likeCondition+") AND "+groupCol+" = ?", + keywordInt, "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", group) } else { - query = query.Where("id = ?", keywordInt) + query = query.Where(likeCondition, + keywordInt, "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%") } } else { - // 如果不是ID搜索,则使用模糊匹配 - likeCondition := "username LIKE ? OR email LIKE ? OR display_name LIKE ?" + // 非数字关键字,只搜索字符串字段 if group != "" { query = query.Where("("+likeCondition+") AND "+groupCol+" = ?", "%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%", group)