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

एक कस्टम MySQL फ़ंक्शन बनाना?

आप अपने आवेदन में इस MySQL फ़ंक्शन की घोषणा करते हैं, और यह डेटाबेस में तब तक रहेगा जब तक डेटाबेस सर्वर पुनरारंभ नहीं हो जाता।

mysql_query("CREATE FUNCTION Distance(LAT_A INT, LON_A INT, LAT_B INT, LON_B INT, )
RETURNS INT
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE radius, deltaLat, deltaLon, result, distance BIGINT;
SET radius=3956;
SET deltaLat=LAT_B-LAT_A;
SET deltaLon=LON_B-LON_A;
SET result=POW(SIN(deltaLat/2), 2) + (COS(LAT_A) * COS(LAT_B) * POW(SIN(deltaLon/2.0), 2));
SET distance=radius * 2 * ATAN2(SQRT(result), SQRT(1 - result));
RETURN distance;
END");

यह MySQL के गणितीय कार्यों का उपयोग करता है . इस प्रोसेसिंग को डेटाबेस में लोड करना तेज़ और कुशल है (डेटा को पूरे तार में यात्रा करने की ज़रूरत नहीं है, और आपको केवल वही परिणाम मिलते हैं जो आप चाहते हैं)।

एक बार जब आप इसे घोषित कर देते हैं, तो आप इसे इस प्रकार उपयोग कर सकते हैं:

$query = "SELECT lat, lon FROM zipcodes WHERE Distance(lat, lon, 0, 0) < 20";
mysql_query($query);

हालाँकि, यदि आपका डेटाबेस पुनरारंभ होता है, तो पहले घोषित कोई भी कार्य या प्रक्रिया खो जाती है। MySQL त्रुटि 1305 को संभालना संभव है (Function functionName does not exist ) आवेदन स्तर पर शान से।

आपके डेटाबेस एरर हैंडलर में:

switch (mysql_errno()):
    case 1305:
        if (false === $database->_declareStoredProcedureFlag) {
             if ($c = preg_match_all("/FUNCTION [a-zA-Z0-9]+\." .
                 "([a-zA-Z0-9_]*) does not exist/is",
                 mysql_error(), $matches)
             ) {
                 $storedFunctionName = $matches[1][0];
                 $database->_declareStoredProcedureFlag = true;
                 if (true === $database->declareStoredFunction($storedFunctionName)) {
                     $result = mysql_query($query);
                 }
             }
         }
         break;
    ...


  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 में हेक्साडेसिमल मानों को बाइनरी के रूप में संग्रहीत करना

  2. क्रॉन जॉब्स/इवेंट शेड्यूलर का उपयोग करके 30 मिनट के बाद MySQL रो हटाएं

  3. तीसरी तालिका में अपने FK के साथ 2 तालिकाओं में शामिल होने की आवश्यकता है

  4. दिनांक सीमाओं की तुलना करना

  5. अस्थायी तालिकाओं के निर्माण के लिए शामिल होने के आदेश का स्पष्टीकरण