func AppOperateRecharge(a *decorator.ApiBase) error { logger.AccessLogger.Info("AppOperateRecharge...") resp := adminStruct.BusinessOrderRecharge{} a.Ts.Table("business_base as a"). Select('a.bid, a.bname, a.acct_bal, a.buy_Sum_Amt, a.'). Where("a.link_id=? and a.user_type=?", a.Token.LinkId, a.Token.UserType) return a.ReturnSuccessCustomResponse(resp) }查询多个表数据并储存到这个结构体商家名称在user_base表里面使用joins关联表待结算金额和已结算金额需要查某一个表里前端传回来的同一个id某一个字段状态为1的关联字段数据总和type BusinessOrderRecharge struct { Bid int64 json:"bid" // 商家ID Bname string json:"bname" // 商家名称 Acct_Bal int64 json:"acct_Bal" //账面余额 Buy_sum_amt int64 json:"buy_Sum_Amt" //采购货款 Unpaid_amt int64 json:"unpaid_Amt" //待结算货款 Stmt_amt int64 json:"stmt_Amt" //已结算金额 Admin_uid int64 json:"admin_Uid" //管理员 Admin_name string json:"admin_name" //管理员姓名 Status string json:"status" //商家状态
时间: 2024-04-15 14:30:12 浏览: 111
根据你提供的代码,你想要查询多个表的数据,并将结果存储到 `BusinessOrderRecharge` 结构体中。商家名称在 `user_base` 表中,使用 `joins` 关联表查询待结算金额和已结算金额,需要查找某一个表中前端传回的相同 ID 下某一个字段状态为 1 的关联字段数据总和。以下是修改后的代码示例:
```go
func AppOperateRecharge(a *decorator.ApiBase) error {
logger.AccessLogger.Info("AppOperateRecharge...")
resp := adminStruct.BusinessOrderRecharge{}
// 查询商家名称
err := a.Ts.Table("business_base as a").
Joins("INNER JOIN user_base as b ON a.bid = b.bid").
Where("a.link_id = ? AND a.user_type = ?", a.Token.LinkId, a.Token.UserType).
Select("a.bid, b.bname, a.acct_bal, a.buy_Sum_Amt").
Scan(&resp).Error
if err != nil {
return err
}
// 查询待结算金额总和
unpaidQuery := fmt.Sprintf("SELECT SUM(unpaid_column_name) FROM table_name WHERE id = ? AND status = 1")
var unpaidAmt int64
err = a.Ts.Raw(unpaidQuery, a.Token.ID).Scan(&unpaidAmt).Error
if err != nil {
return err
}
resp.Unpaid_amt = unpaidAmt
// 查询已结算金额总和
stmtQuery := fmt.Sprintf("SELECT SUM(stmt_column_name) FROM table_name WHERE id = ? AND status = 1")
var stmtAmt int64
err = a.Ts.Raw(stmtQuery, a.Token.ID).Scan(&stmtAmt).Error
if err != nil {
return err
}
resp.Stmt_amt = stmtAmt
// 查询其他字段
query := `SELECT admin_uid, admin_name, status FROM business_base WHERE link_id = ? AND user_type = ?`
err = a.Ts.Raw(query, a.Token.LinkId, a.Token.UserType).Scan(&resp).Error
if err != nil {
return err
}
return a.ReturnSuccessCustomResponse(resp)
}
```
请注意以下几点:
1. 将 `unpaid_column_name` 替换为待结算金额字段的列名,`stmt_column_name` 替换为已结算金额字段的列名,`table_name` 替换为包含这些字段的表名。
2. 使用 `joins` 进行表的关联,根据实际情况修改 `INNER JOIN user_base as b ON a.bid = b.bid` 的条件。
3. 在查询语句中使用 `?` 占位符来代替变量,然后在 `Scan()` 方法中传递相应的参数来填充占位符。
4. 使用 `Scan(&resp)` 方法将查询结果直接存储到 `resp` 变量中。
请注意在实际应用中进行错误处理和日志记录等操作。这个示例代码仅供参考,你需要根据实际情况进行适当的修改。
阅读全文