修正分页
This commit is contained in:
		@@ -442,19 +442,9 @@ func NewSchema(config Config) (graphql.Schema, error) {
 | 
				
			|||||||
				}
 | 
									}
 | 
				
			||||||
				mapstructure.Decode(p.Args, &args)
 | 
									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 total int
 | 
				
			||||||
				var images []Image
 | 
									var images []Image
 | 
				
			||||||
				//var query = db.Limit(limit).Table("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")
 | 
				
			||||||
				//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 argFormat = []string{"id", "width", "height", "content", "remark", "description", "tags", "rank", "comment_num", "praise_count", "collect_count", "article_id", "user_id"}
 | 
									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 {
 | 
									for _, format := range argFormat {
 | 
				
			||||||
					if p.Args[format] != nil {
 | 
										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]})
 | 
											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条
 | 
									// 取所有数据的前N条
 | 
				
			||||||
				var cursor string
 | 
									var cursor string
 | 
				
			||||||
				if args.After != 0 {
 | 
									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(`
 | 
									sql = fmt.Sprintf(`
 | 
				
			||||||
					WITH RankedArticles AS (%s)
 | 
										WITH RankedArticles AS (%s)
 | 
				
			||||||
					SELECT web_images.* FROM web_images JOIN(
 | 
										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;
 | 
										) AS LimitedRanked ON web_images.id = LimitedRanked.id;
 | 
				
			||||||
				`, sql, cursor)
 | 
									`, sql, cursor, limit)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				fmt.Println(sql)
 | 
									fmt.Println(sql)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user