2016-12-29 193 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 ...