sql - GORM SQL 优化
问题描述
在这里,我使用 GORM 进行 sql 查询。我已经宣布了模型。问题是我需要这样的输出。我能够生成预期的输出,但它需要循环,所以我认为我们可以通过减少嵌套调用来优化查询性能。那么如何合并这种查询类型的子查询或嵌套查询。
type Result struct {
User1 User1
User2 User2
}
type User1 struct {
User string
Query_id string `gorm:"primary_key"json:"query_id"`
User2 []User2 `gorm:"foreignkey:query_id" json:"input"`
}
type User2 struct {
Table_name string `json:"table_name"`
Query_id string `gorm:"primary_key"json:"query_id"`
}
func (User2) TableName() string {
return "tabledata"
}
func (User1) TableName() string {
return "querydata"
}
var user1 User1
var user2 []User2
db.Find(&user2)
db.Select("querydata.query_id,querydata.user,tabledata.table_name").Joins("JOIN tabledata ON tabledata.query_id = querydata.query_id ").Find(&user1)
user1.User2 = user2
c.JSON(http.StatusOK, gin.H{"result": &user1})
电流输出:
"result": {
"User": "ram",
"query_id": "firstquery",
"input": [
{
"table_name": "first_table",
"query_id": "firstquery"
},
{
"table_name": "second_table",
"query_id": "firstquery"
},
{
"table_name": "second_table",
"query_id": "secondquery"
},
{
"table_name": "second_table",
"query_id": "secondquery"
}]
}
**Expected output**
"result":
{
"User": "ram",
"query_id": "firstquery",
"input": [
{
"table_name": "first_table",
"query_id": "firstquery"
},
{
"table_name": "second_table",
"query_id": "firstquery"
}]
},
{
"User": "krishna",
"query_id": "secondquery",
"input": [
{
"table_name": "first_table",
"query_id": "secondquery"
},
{
"table_name": "second_table",
"query_id": "secondquery"
}]
}
}
**Expected output via this**
I am able to generate expected output through this, but I want to minimize this for loop calls. so any suggestion how can I improve GROM SQL .
var qresult []User1
db.Table("qtb").Find(&qresult)
for i := range qresult {
db.Table("ttb").Select("table_name").Where("query_id=?", qresult[i].Query_id).Find(&qresult[i].User2)
}
解决方案
您应该User2
在查询中预加载:
var qresult []User1
db.Preload("tabledata").Find(&qresult)
推荐阅读
- unit-testing - 如何模拟打开不存在的文件
- excel - 在表格底部插入新行并删除顶行的问题
- python - 如何删除熊猫中多个括号之间的单词?
- java - 如何在 Visual Studio Code (v 1.27.2) 中设置 java 类路径?
- jquery - 一页中有多个表单,数据应存储在不同的表中
- python - 如何使用 imdb 中的 imdbpy 检索特定电影 ID 的情节关键字
- android - NotificationCompat.Builder() 不接受 Channel Id 作为参数
- javascript - 如何将变量从一个函数调用到另一个函数
- bash - 在 shell 中搜索字符串,如果找不到则打印新行
- javascript - how to combine objects in an array that have the same key in javascript?