From ac46407a305aab7501ee9dedfcb640746b402031 Mon Sep 17 00:00:00 2001 From: satori Date: Sun, 17 Nov 2024 17:58:25 +0800 Subject: [PATCH] =?UTF-8?q?=E5=90=88=E5=B9=B6join?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/graphql.go | 39 +++++++++++++++++++-------------------- 1 file changed, 19 insertions(+), 20 deletions(-) diff --git a/api/graphql.go b/api/graphql.go index d5e3c8a..fa40ed7 100644 --- a/api/graphql.go +++ b/api/graphql.go @@ -704,42 +704,33 @@ func NewSchema(config Config) (graphql.Schema, error) { )) } + var collect_params []goqu.Expression = []goqu.Expression{ + goqu.I("web_images.id").Eq(goqu.I("web_collect.image_id")), + } + // 数据库中筛选:用户收藏的截图 if p.Args["collect"] != nil { - query = query.Join(goqu.T("web_collect"), goqu.On( - goqu.I("web_images.id").Eq(goqu.I("web_collect.image_id")), - goqu.I("web_collect.user_id").Eq(p.Args["collect"]), - )) + collect_params = append(collect_params, goqu.I("web_collect.user_id").Eq(p.Args["collect"])) } // 数据库中筛选:收藏夹中的截图 if p.Args["collect_id"] != nil { - query = query.Join(goqu.T("web_collect"), goqu.On( - goqu.I("web_images.id").Eq(goqu.I("web_collect.image_id")), - goqu.I("web_collect.collect_id").Eq(p.Args["collect_id"]), - )) + collect_params = append(collect_params, goqu.I("web_collect.collect_id").Eq(p.Args["collect_id"])) } // 数据库中筛选:收藏夹中的截图 if p.Args["explorer_id"] != nil { - query = query.Join(goqu.T("web_collect"), goqu.On( - goqu.I("web_images.id").Eq(goqu.I("web_collect.image_id")), - goqu.I("web_collect.explorer_id").Eq(p.Args["explorer_id"]), - )) + collect_params = append(collect_params, goqu.I("web_collect.explorer_id").Eq(p.Args["explorer_id"])) + } + + if len(collect_params) > 1 { + query = query.Join(goqu.T("web_collect"), goqu.On(collect_params...)) } var conditions []goqu.Expression = []goqu.Expression{ goqu.I("web_images.article_id").Eq(goqu.I("web_article.id")), } - // 按游戏标签筛选图像 - if p.Args["article_tags"] != nil { - tags := strings.Split(strings.ReplaceAll(p.Args["article_tags"].(string), " ", ""), ", ") - for _, tag := range tags { - conditions = append(conditions, goqu.L("MATCH(web_article.tags) AGAINST (? IN NATURAL LANGUAGE MODE)", tag)) - } - } - // 按游戏风格筛选图像 if p.Args["style"] != nil { conditions = append(conditions, goqu.I("web_article.style").Eq(p.Args["style"])) @@ -766,6 +757,14 @@ func NewSchema(config Config) (graphql.Schema, error) { conditions = append(conditions, goqu.I("web_article.category_id").In(category_ids)) } + // 按游戏标签筛选图像 + if p.Args["article_tags"] != nil { + tags := strings.Split(strings.ReplaceAll(p.Args["article_tags"].(string), " ", ""), ", ") + for _, tag := range tags { + conditions = append(conditions, goqu.L("MATCH(web_article.tags) AGAINST (? IN NATURAL LANGUAGE MODE)", tag)) + } + } + if len(conditions) > 1 { query = query.Join(goqu.T("web_article"), goqu.On(conditions...)) }