2016-12-29 122 views
1

我有像我下面的模型结构:Golang:SQLX StructScan映射数据库列结构

type Detail struct { 
Product 
Stocks 
} 
type Product struct { 
Name  string   `db:"name"` 
Id   int   `db:"id"` 
} 
type Stocks { 
Name  string   `db:"name"` 
Price  float   `db:"price"` 
Type  string   `db:"type"` 
} 

我想有一个查询加入上述表格的形式大致如下:

query, args, err := sqlx.In("select p.name , s.price from Product p,Stocks s where p.name=s.name and type IN (?)",typecodes) 
query = s.Cmd.Db.Rebind(query) 
var rows *sqlx.Rows 
rows, err = s.Cmd.Db.Queryx(query, args...) 

for rows.Next() { 
      var p model.Detail 
      err = rows.StructScan(&p) 
} 

会想知道我什么时候做rows.StructScan(& p)将产品结构名称字段填充或将有任何ambuigity发现相同,因为股票也有名称字段?

目前我没有得到上述任何结果。但是当我评论股票结构中的名称字段时,我正在获取数据。

让我知道我在这里失踪。

+0

对于模棱两可的领域你最好与他们的结构名称的前缀,注解它们,例如'product_name','stock_name',然后在您的SQL语句中适当地使用它们。 –

+0

感谢Martin.It工作得很好:) –

+0

@MartinGallagher发布那个答案。 – icza

回答

1

对于不明确的字段,最好使用结构名称的前缀对它们进行注释,例如, product_name,stock_name,然后在您的SQL语句中适当地使用它们。

I.e.

type Detail struct { 
Product 
Stocks 
} 

type Product struct { 
Name  string   `db:"product_name"` 
Id   int   `db:"id"` 
} 

type Stocks { 
Name  string   `db:"stock_name"` 
Price  float   `db:"price"` 
Type  string   `db:"type"` 
} 

而在你的SQL:

SELECT p.name AS product_name, s.name AS stock_name, ... FROM Product p, Stocks s WHERE ...