xorm
xorm copied to clipboard
group by can not get count(*) count
struct :
type InspectReportMerge struct {
InspectReportMergeId string `xorm:"unique"`
ParentProjectId int
HostHostId int
HostHostName string
HostHostIp string
InspectReportMergeHostTag string
InspectReportMergeType int
InspectReportMergeReportTime time.Time
InspectReportMergeValue string
DelFlag int
Cnt int `xorm:"-"`
}
golang code:
var report []*report.InspectReportMerge
err = orm.In("parent_project_id", project_ids).Where(
"inspect_report_merge_host_tag=?", tag).GroupBy("inspect_report_merge_type").Select(
"inspect_report_merge_type,count(*) as cnt").Find(&report)
SELECT inspect_report_merge_type, count(inspect_report_merge_id) as cnt FROM `inspect_report_merge` WHERE `parent_project_id` IN (443) AND (inspect_report_merge_host_tag="linux") GROUP BY inspect_report_merge_type
has data:
inspect_report_merge_type cnt 2 8
log:
[xorm] [info] 2019/06/27 11:53:22.583164 [SQL] SELECT inspect_report_merge_type,count(*) as cnt FROM inspect_report_merge
WHERE parent_project_id
IN (?) AND (inspect_report_merge_host_tag=?) GROUP BY inspect_report_merge_type []interface {}{443, "linux"}
but the struct Cnt is still 0 [0]:<*HostService/typesReport.InspectReportMerge>(0xc4202e0360) :<HostService/typesReport.InspectReportMerge> InspectReportMergeId:"" ParentProjectId:0 HostHostId:0 HostHostName:"" HostHostIp:"" InspectReportMergeHostTag:"" InspectReportMergeType:2 InspectReportMergeReportTime:<time.Time> InspectReportMergeValue:"" DelFlag:0 Cnt:0
func GroupByInspectHostReportsCntByProjectIdAndTag(project_ids []int32, tag, report_time string) ([]*report.InspectReportMerge, error) {
var report []*report.InspectReportMerge
var orm *xorm.Engine
var err error = nil
orm, err = GetEngine()
location, err := time.LoadLocation("Asia/Shanghai")
orm.TZLocation = location
if err != nil {
logs.Error("mysqlEngine error:", err.Error())
return report, err
}
// reportBeginStr, reportEndStr := common.TimeRangeOneDay2String(report_time, location)
// err = orm.In("parent_project_id", project_ids).Where(
// "inspect_report_merge_host_tag=?", tag).And(
// "inspect_report_merge_report_time>=?", reportBeginStr).And(
// "inspect_report_merge_report_time<?", reportEndStr).And("del_flag=?", 0).Distinct("host_host_id").Select(
// "inspect_report_merge_type, count(*) as cnt").GroupBy("inspect_report_merge_type").Find(&report)
err = orm.In("parent_project_id", project_ids).Where(
"inspect_report_merge_host_tag=?", tag).GroupBy("inspect_report_merge_type").Select(
"inspect_report_merge_type,count(*) as cnt").Find(&report)
if err != nil {
logs.Error("orm error:", err.Error())
return report, err
}
return report, err
}
With xorm:"-"
flag, it will not be read from database.
With
xorm:"-"
flag, it will not be read from database.
i use:
type InspectReportMergeGroup struct {
InspectReportMergeType int
Cnt int
}
var groups []*report.InspectReportMergeGroup
orm.Table("inspect_report_merge").In("parent_project_id", project_ids)..Where(
"inspect_report_merge_host_tag=?", tag).GroupBy("inspect_report_merge_type").Select(
"inspect_report_merge_type,count(*) as cnt").Find(&groups)
then, it's ok now.
but i consider it's not a good way using like this. should be a better way. thanks.