Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara meneruskan []slice ke kondisi IN dalam pernyataan SQL yang disiapkan dengan kondisi non-IN juga?

Namun, ada solusi. Pertama-tama, karena kita hanya memiliki satu parameter exploding dan tidak ada yang lain, pertama-tama kita harus mengumpulkan parameter kita dalam satu []slice :

var params []interface{}
params = append(params, Type)
for _, subtype := range SubTypes {
  params = append(params, SubTypes)
}

Karena SQL tidak akan berkembang dengan sendirinya, mari kita perluas loop itu:

var params []interface{}
params = append(params, Type)
inCondition := ""
for _, subtype := range SubTypes {
  params = append(params, SubTypes)
  if inCondition != "" {
    inCondition += ", "
  }
  inCondition += "?"
}

Dengan asumsi SubTypes berisi []int{1,2,3} , inCondition sekarang harus berisi ?, ?, ? .

Kami kemudian menggabungkannya ke pernyataan SQL kami dan meledakkan argumen:

sqlstr := fmt.Sprintf(`SELECT *
  FROM foo
  WHERE type = ?
    AND subtype IN (%s)`, inCodition)
rows, err := sqldb.Query(sqlstr, params...)

Tentu saja, itu akan sangat keren, jika Anda bisa melewatkan []slice s ke pernyataan yang Anda siapkan, dan secara otomatis diperluas. Tapi itu mungkin memberikan beberapa hasil yang tidak terduga jika Anda berurusan dengan lebih banyak data 'tidak diketahui'.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pelanggaran batasan integritas:1048 Kolom 'user_id' tidak boleh terjadi kesalahan nol saat menetapkan peran (Laravel 5.3)

  2. T_ENCAPSED_AND_WHITESPACE tak terduga, mengharapkan kesalahan T_STRING atau T_VARIABLE atau T_NUM_STRING

  3. Properti Objek PHP memiliki tanda kurung di dalamnya

  4. Bagaimana mengatasi masalah Tidak dapat memuat plugin otentikasi 'caching_sha2_password'

  5. Ubah kolom Vs ubah kolom