Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मैं गैर-इन-शर्तों के साथ तैयार एसक्यूएल स्टेटमेंट में एक [] स्लाइस को इन-कंडीशन में कैसे पास करूं?

हालाँकि, एक समाधान है। सबसे पहले, चूंकि हम केवल . कर सकते हैं एक एकल विस्फोट पैरामीटर है और कोई अन्य नहीं, हमें पहले अपने मापदंडों को एक []slice में एक साथ रखना चाहिए :

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

चूंकि SQL अपने आप विस्तृत नहीं होगा, आइए उस लूप का विस्तार करें:

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

मान लें कि SubTypes इसमें []int{1,2,3} . शामिल है , inCondition अब ?, ?, ? . होना चाहिए ।

फिर हम इसे अपने SQL स्टेटमेंट में जोड़ते हैं और तर्क को विस्फोट करते हैं:

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

बेशक, यह बहुत अच्छा होगा, अगर आप बस []slice . पास कर सकते हैं आपके तैयार किए गए बयानों के लिए, और स्वचालित रूप से विस्तारित। लेकिन अगर आप अधिक 'अज्ञात' डेटा के साथ काम कर रहे हैं तो यह कुछ अप्रत्याशित परिणाम दे सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL बनाम PostgreSQL JSON खोज सुविधाएँ

  2. java.sql.SQLException:कोई डेटाबेस नहीं चुना गया

  3. MySQL केवल समग्र रोलअप प्राप्त करता है

  4. एंड्रॉइड:जेडीबीसी, पीएचपी या किसी अन्य वेब सेवा का उपयोग किए बिना MySQL डीबी को डेटा कैसे भेजें?

  5. यदि मौजूद नहीं है तो PHP mysql डेटाबेस बनाएं