我有以下功能,这是一项正在进行的工作。此外,我试图执行的查询至少可以说是一个脑筋急转弯:
功能:
func OptimizedKeywordPagesBYKeywords(DB *sqlx.DB, PageableId, auditId int, PageableType, keyword, source string) ([]page.AudPage, error) {
auditIdString := strconv.Itoa(auditId)
PageableIdString := strconv.Itoa(PageableId)
base := `SELECT "pages".* FROM "pages"
INNER JOIN "keyword_pages" ON "keyword_pages"."page_id" = "pages"."id"
INNER JOIN "keyword_statistics" ON "keyword_statistics"."id" = "keyword_pages"."keyword_statistic_id"
INNER JOIN "keyword_frequencies" ON "keyword_frequencies"."keyword_statistic_id" = "keyword_statistics"."id"
WHERE ((pageable_id = '%s' AND pageable_type = '%s')
AND (meta_description ~* '%s\M' or title ~* '%s\M' or h1_1 ~* '%s\M' or h2_1 ~* '%s\M' or h2_2 ~* '%s\M' or path ~* '%s\M' or content ~* '%s\M'))
AND "keyword_pages"."source" = '%s'
AND "keyword_pages"."optimized" = 't'
AND "keyword_frequencies"."audit_id" = '%s'
GROUP BY pages.id`
query := fmt.Sprintf(base, PageableIdString, PageableType, keyword, keyword, keyword, keyword, keyword, keyword, keyword, source, auditIdString)
var pages []page.AudPage
err := DB.Select(&pages, query)
if err != nil {
return pages, err
}
return pages, nil
}
type AudPage struct {
Id sql.NullInt64 `db:"id"`
PageableId sql.NullInt64 `db:"pageable_id"`
PageableType sql.NullString `db:"pageable_type"`
Url sql.NullString `db:"url"`
Path sql.NullString `db:"path"`
ContentType sql.NullString `db:"content_type"`
StatusCode sql.NullString `db:"status_code"`
Status sql.NullString `db:"status"`
Title sql.NullString `db:"title"`
TitleLength sql.NullInt64 `db:"title_length"`
TitlePixelWidth sql.NullInt64 `db:"title_pixel_width"`
MetaDescription sql.NullString `db:"meta_description"`
MetaDescriptionLength sql.NullInt64 `db:"meta_description_length"`
MetaDescriptionPixelWidth sql.NullInt64 `db:"meta_description_pixel_width"`
MetaKeyword sql.NullString `db:"meta_keyword"`
MetaKeywordLength sql.NullInt64 `db:"meta_keyword_length"`
MetaRobot1 sql.NullString `db:"meta_robot_1"`
MetaRobot2 sql.NullString `db:"meta_robot_2"`
MetaRefresh sql.NullString `db:"meta_refresh"`
CanonicalLink sql.NullString `db:"canonical_link"`
H11 sql.NullString `db:"h1_1"`
H1_1_Length sql.NullInt64 `db:"h1_1_length"`
H21 sql.NullString `db:"h2_1"`
H21Length sql.NullInt64 `db:"h2_1_length"`
H22 sql.NullString `db:"h2_2"`
H22Length sql.NullInt64 `db:"h2_2_length"`
FileSize sql.NullInt64 `db:"file_size"`
WordCount sql.NullInt64 `db:"word_count"`
DepthLevel sql.NullInt64 `db:"depth_level"`
InLinkSize sql.NullInt64 `db:"in_link_size"`
OutLinkSize sql.NullInt64 `db:"out_link_size"`
ExternalOutLinkSize sql.NullInt64 `db:"external_out_link_size"`
ContentHash sql.NullString `db:"content_hash"`
StartDate time.Time `db:"start_date"`
EndDate time.Time `db:"end_date"`
CreatedAt time.Time `db:"created_at"`
UpdatedAt time.Time `db:"updated_at"`
BodyContent sql.NullString `db:"body_content"`
Content sql.NullString `db:"content"`
}
问题:
- 我知道这个查询确实有效,因为我在 pgAdmin3 中编写了它。
- 我还记录了查询变量的输出结果,并且查询按预期运行,再次使用 pgAdmin3。
- Select 函数不返回错误
- 我已经扫描了 sqlx 的文档,并试图用谷歌搜索这个问题,但没有出现任何解决方案。
使用:
- Postgres:9.4.1
- 去:1.5
附加信息:
- message from running the query in pgAdmin3:
Total query runtime: 33 ms.
1 row retrieved.
如果我遗漏了部分文档,或者我应该使用而不是选择的 sqlx 中的另一个函数,或者是否需要我提供任何其他信息,请告诉我。