diff --git a/api/graphql.go b/api/graphql.go index 5530c4f..409fadf 100644 --- a/api/graphql.go +++ b/api/graphql.go @@ -442,19 +442,9 @@ func NewSchema(config Config) (graphql.Schema, error) { } mapstructure.Decode(p.Args, &args) - // 限制长度防止全表扫描 - //var limit = 10 - //if args.First != 0 { - // limit = args.First - //} else if args.Last != 0 { - // limit = args.Last - //} - var total int var images []Image - //var query = db.Limit(limit).Table("web_images") - //order := "ORDER BY " + p.Args["sort"].(string) + " " + p.Args["order"].(string) - var query = goqu.Dialect("mysql").Select("id", goqu.L("ROW_NUMBER() OVER(ORDER BY id ASC)").As("row_num")).From("web_images") + var query = goqu.Dialect("mysql").Select("web_images.id", goqu.L("ROW_NUMBER() OVER(ORDER BY id ASC)").As("row_num")).From("web_images") // 参数映射 var argFormat = []string{"id", "width", "height", "content", "remark", "description", "tags", "rank", "comment_num", "praise_count", "collect_count", "article_id", "user_id"} @@ -462,7 +452,6 @@ func NewSchema(config Config) (graphql.Schema, error) { // 筛选条件 for _, format := range argFormat { if p.Args[format] != nil { - //query = query.Where(fmt.Sprintf("web_images.%s = ?", format), p.Args[format]) query.Where(goqu.Ex{fmt.Sprintf("web_images.%s = ?", format): p.Args[format]}) } } @@ -658,16 +647,23 @@ func NewSchema(config Config) (graphql.Schema, error) { // 取所有数据的前N条 var cursor string if args.After != 0 { - cursor = fmt.Sprintf(`WHERE row_num > (SELECT row_num FROM RankedArticles WHERE id = %d)`, args.After) + cursor = fmt.Sprintf(`WHERE row_num > (SELECT row_num FROM RankedArticles WHERE RankedArticles.id = %d)`, args.After) + } + + var limit int = 10 + if args.First != 0 { + limit = args.First + } else if args.Last != 0 { + limit = args.Last } // 取大于游标的数据 sql = fmt.Sprintf(` WITH RankedArticles AS (%s) SELECT web_images.* FROM web_images JOIN( - SELECT id FROM RankedArticles %s ORDER BY row_num LIMIT 5 + SELECT RankedArticles.id FROM RankedArticles %s ORDER BY row_num LIMIT %d ) AS LimitedRanked ON web_images.id = LimitedRanked.id; - `, sql, cursor) + `, sql, cursor, limit) fmt.Println(sql)