2016-08-30 11 views
2

Golangプロジェクトに未定義の引数を持つIN演算子を使用してMySQLクエリを使用しようとしています。MySQL INオペレータを使用して未定義のargsをクエリする

私はパッケージgithub.com/go-sql-driver/mysqlを使用して、このstackoverflowの答えに私のソリューションを構築しようとしています:How to execute an IN lookup in SQL using Golang?

私は私の進むべき道についてのいくつかのアドバイスを与えるいくつかの類似した記事を読んだが、私は上のこだわっそれは引数としてスライスを直接使用することができないため、クエリの実行部分です。

クエリ:SELECT ID、名前のid INは 「SQL(TYPE_ID(IN)resources_types FROM RESOURCE_ID を選択?)資源からGolangは私に、実行時エラーを返します

//converting my form args []string into []int 
var args []int 
for _, v := range r.Form["type"] { 
    t, _ := strconv.Atoi(v) 
    args = append(args, t) 
} 

sql := "SELECT id, name FROM resources WHERE id IN (SELECT resource_id FROM resources_types WHERE type_id IN (?" + strings.Repeat(",?", len(args)-1) + "))" 
fmt.Println("Query : ", sql) 
stmt, _ := db.Prepare(sql) 
rows, err := stmt.Query(args) 
defer stmt.Close() 

:;私は

rows, err := stmt.Query(args[0], args[1]) 
にしようとすると、1"

を得たことは、作品のステートメントは、2つの入力を期待します

しかし、定義されていない数の引数が必要なので、解決策ではありません。少なくともMySQLで動作させることは可能ですか?

答えて

1

Stmt.Query()は、可変長のパラメータがあります。

func (s *Stmt) Query(args ...interface{}) (*Rows, error) 

これは可変引数パラメータの値としてスライス値を渡すために省略記号...を使用できることを意味しますが、そのスライスはタイプ[]interface{}、例えばである必要があります。

代わりに、クエリ引数を渡さずにSQLクエリを事前ビルドして実行することもできます(例:Go and IN clause in Postgresを参照)。

+0

この明白な答えをありがとう!すでに動作していますが、プレビルドのクエリをチェックします。 –

関連する問題