Created
August 4, 2018 19:27
-
-
Save anti1869/84b994692c1b0b2de58446cba328026d to your computer and use it in GitHub Desktop.
Join two structs on foreign key relation with jmoiron/sqlx (nested json object from struct)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Note: I have db.MapperFunc(FromCamelCaseToUnderScore) | |
This will make nested json like this | |
{ | |
"likes": [ | |
{ | |
"chat_id": 155636374, | |
"created": "2018-08-04T10:52:36.360217Z", | |
"from": { | |
"id": 1, | |
"rating": 11, | |
"username": "anti1869" | |
}, | |
"id": 21, | |
"like_msg": "+", | |
"question_msg": "", | |
"reply_msg": "+", | |
"to": { | |
"id": 1, | |
"rating": 11, | |
"username": "anti1869" | |
} | |
} | |
] | |
} | |
*/ | |
package web | |
import ( | |
"github.com/kataras/iris" | |
"somewhere.com/somewhere/config" | |
"log" | |
) | |
type LikeList struct { | |
Likes []Like `json:"likes"` | |
} | |
type Like struct { | |
Id int `json:"id"` | |
ChatId int64 `json:"chat_id"` | |
Created string `json:"created"` | |
LikeMsg string `json:"like_msg"` | |
ReplyMsg string `json:"reply_msg"` | |
QuestionMsg string `json:"question_msg"` | |
From User `json:"from" db:"from"` | |
To User `json:"to" db:"to"` | |
} | |
func GetLikeListhandler(ctx iris.Context){ | |
result := LikeList{} | |
q := ` SELECT | |
l.id, l.chat_id, l.created, l.like_msg, l.reply_msg, | |
uf.id "from.id", | |
uf.username "from.username", | |
uf.rating "from.rating", | |
ut.id "to.id", | |
ut.username "to.username", | |
ut.rating "to.rating" | |
FROM likes l | |
JOIN users uf ON l.from_id = uf.id | |
JOIN users ut ON l.to_id = ut.id | |
ORDER BY created DESC` | |
rows, err := config.Db.Queryx(q) | |
if err != nil { | |
log.Fatal(err) | |
} | |
defer rows.Close() | |
for rows.Next() { | |
var l Like | |
err = rows.StructScan(&l) | |
if err != nil { | |
log.Print(err) | |
} | |
result.Likes = append(result.Likes, l) | |
} | |
err = rows.Err() | |
if err != nil { | |
log.Panic(err) | |
} | |
ctx.JSON(result) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I know this is years late, but it's just SQL. MySQL supports aliasing columns without using the
AS
keyword.