1

我有以下功能,这是一项正在进行的工作。此外,我试图执行的查询至少可以说是一个脑筋急转弯:

功能:

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 中的另一个函数,或者是否需要我提供任何其他信息,请告诉我。

4

0 回答 0