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

कोल्डफ्यूजन एक क्वेरी को पैरामीटरेट करना

सही दृष्टिकोण को नज़रअंदाज़ करना एक पल के लिए, ऐसा होने का कारण यह है कि आप गलत cfsqltype . का उपयोग कर रहे हैं मापदंडों के लिए। तो आप वास्तव में डेटाबेस में अलग-अलग मान भेज रहे हैं (और परिणामस्वरूप एक अलग तुलना कर रहे हैं) जितना आप सोच रहे हैं। परिणामस्वरूप, क्वेरी किसी भी मेल खाने वाले रिकॉर्ड को खोजने में विफल रहती है। इसलिए आपका चार्ट खाली है।

cf_sql_timestamp . का उपयोग करके आप "मान" को पूर्ण दिनांक/समय वस्तु में परिवर्तित कर रहे हैं। हालांकि, YEAR() केवल चार अंकों की संख्या देता है। तो आप सेब और संतरे की तुलना कर रहे हैं। संकल्पनात्मक रूप से, आपकी क्वेरी वास्तव में ऐसा कर रही है:

  WHERE  2014 = {ts '2009-02-13 23:31:30'}

इसका कोई त्रुटि नहीं होने का कारण यह है कि दिनांक/समय मान आंतरिक रूप से संख्याओं के रूप में संग्रहीत किए जाते हैं। तो आप वास्तव में एक छोटी संख्या (यानी वर्ष) की तुलना वास्तव में बड़ी संख्या (यानी दिनांक/समय) से कर रहे हैं। जाहिर है कि तारीख का मूल्य बहुत बड़ा होगा, इसलिए यह लगभग कभी भी वर्ष की संख्या से मेल नहीं खाएगा। फिर से, अवधारणात्मक रूप से आपकी क्वेरी यह कर रही है:

 WHERE 2014 = 1234567890

चूंकि cfsqltype वैकल्पिक है, बहुत से लोग सोचते हैं कि यह बहुत महत्वपूर्ण नहीं है - लेकिन यह है।

सुसंगत परिणाम सुनिश्चित करने का एकमात्र तरीका उपयुक्त cfsqltype निर्दिष्ट करना है। यह तुलना कॉलम/फ़ंक्शन के डेटा प्रकार से मेल खाना चाहिए, या कम से कम एक समकक्ष प्रकार से मेल खाना चाहिए। YEAR() . के मामले में , यह चार अंकों की संख्या देता है। तो आपको cf_sql_integer . का उपयोग करना चाहिए , जैसा कि एड्रियन ने टिप्पणियों का उल्लेख किया . वही आपके MONTH()<पर लागू होता है /ए> तुलना।

 WHERE Year(ColumnName) = <cfqueryparam value="2014" cfsqltye="CF_SQL_INTEGER">
 AND   Month(ColumnName) = <cfqueryparam value="11" cfsqltye="CF_SQL_INTEGER"> 

अब यह सब कहने के बाद, डैन का सुझाव दिनांक तुलना करने का बेहतर तरीका है। वह प्रतिमान यह अधिक इंडेक्स फ्रेंडली है और इस पर ध्यान दिए बिना काम करता है कि आपके लक्षित कॉलम में एक तिथि (केवल) या एक तिथि और समय है या नहीं। cf_sql_date के उपयोग पर ध्यान दें उसके उदाहरण में।

  • cf_sql_timestamp - दिनांक और समय दोनों भेजता है
  • cf_sql_date - केवल एक तारीख भेजता है। समय मान छोटा कर दिया गया है


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 'mysqldump' का उपयोग करके CSV प्रारूप में सभी तालिकाओं को डंप करें

  2. MySql काउंट 0 मान नहीं दिखा सकता है

  3. JSON_OBJECT () - MySQL में कुंजी/मान जोड़े की सूची से JSON ऑब्जेक्ट बनाएं

  4. Php में MySQL की फॉरेन की एरर को कैसे हैंडल करें?

  5. क्या मैं पहचानकर्ता (तालिका या फ़ील्ड नाम) या सिंटैक्स कीवर्ड को बाध्य करने के लिए पीडीओ तैयार कथन का उपयोग कर सकता हूं?