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

Membuat fungsi MySQL khusus?

Anda mendeklarasikan fungsi MySQL ini di aplikasi Anda, dan itu akan tetap berada di database sampai server database di-restart.

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");

Ini menggunakan fungsi matematika MySQL . Membongkar pemrosesan ini ke database dengan cepat dan efisien (data tidak harus melewati kabel, dan Anda hanya mendapatkan hasil yang diinginkan).

Setelah Anda mendeklarasikan ini, Anda dapat menggunakannya seperti ini:

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

Namun jika database Anda restart, semua fungsi atau prosedur yang dideklarasikan sebelumnya akan hilang. Dimungkinkan untuk menangani kesalahan MySQL 1305 (Function functionName does not exist ) dengan anggun di tingkat aplikasi.

Di penangan kesalahan basis data Anda:

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. Bagaimana memilih Sub string Acak, yang dipisahkan dengan koma (,) Dari string

  2. Tidak dapat memilih di mana ip=inet_pton($ip)

  3. Bagaimana cara meneruskan nilai dari layanan web Android ke php dan mengambilnya?

  4. Cara Membuat Database di MySQL Workbench menggunakan GUI

  5. baca BLOB dari mysql menggunakan php PDO