【发布时间】:2017-07-20 22:24:36
【问题描述】:
我有这个在 mysql 上运行良好并返回预期结果的查询,但 sqlx 处理起来有困难:
var jokes []model.Joke
err := shared.Dbmap.Select(&jokes, "SELECT * FROM joke INNER JOIN jokevote ON joke.id=jokevote.joke_id AND jokevote.vote=? AND joke.user_id=?", 1, userId)
if err != nil {
log.Println(err)
}
在运行时,我没有得到任何结果,但终端中出现此错误消息:
缺少目的地名称joke_id
查询单个表时没有这个问题。
所以我想知道这里出了什么问题以及如何解决它?
更新:以下是结构:
type Joke struct {
ID int `db:"id" json:"id"`
UserID int `db:"user_id" json:"user_id"`
Title string `db:"title" json:"title"`
Content string `db:"content" json:"content"`
...
}
type JokeVote struct {
ID int `db:"id" json:"id"`
JokeID int `db:"joke_id" json:"joke_id"`
UserID int `db:"user_id" json:"user_id"`
Vote int `db:"vote" json:"vote"`
}
【问题讨论】:
-
您的
model.Joke是否包含带有db:"joke_id"注释的字段? -
没有。它只有
db:"id"作为主键。刚刚添加了结构。 -
那么sqlx不知道在
model.Joke的哪个成员上扫描joke_id。您可以将JokeID字段添加到model.Joke(使用适当的db注释),或者在查询中手动指定要返回的列(而不是SELECT *)。