sql >> データベース >  >> RDS >> Mysql

Laravel5.5でMySQL関数を作成する

    自分の質問に答えます

    MySQL関数を削除するためのアクセス権がなかったようです...

    そこで、DROP FUNCTION IF EXISTS `ST_Distance_Sphere`を置き換えました MySQLバージョンチェックによる:

    $mysql_version_check = DB::select(DB::raw('SHOW VARIABLES LIKE "version";'));
    $mysql_version = $mysql_version_check[0]->Value;
    if (substr($mysql_version,2, 1) < '7' AND substr($mysql_version,4, 1) < '6') {
        $sql = '
            CREATE FUNCTION `ST_Distance_Sphere` (point1 POINT, point2 POINT)
    
                RETURNS FLOAT
                no sql deterministic
                BEGIN
                    declare R INTEGER DEFAULT 6371000;
                    declare `φ1` float;
                    declare `φ2` float;
                    declare `Δφ` float;
                    declare `Δλ` float;
                    declare a float;
                    declare c float;
                    set `φ1` = radians(y(point1));
                    set `φ2` = radians(y(point2));
                    set `Δφ` = radians(y(point2) - y(point1));
                    set `Δλ` = radians(x(point2) - x(point1));
    
                    set a = sin(`Δφ` / 2) * sin(`Δφ` / 2) + cos(`φ1`) * cos(`φ2`) * sin(`Δλ` / 2) * sin(`Δλ` / 2);
                    set c = 2 * atan2(sqrt(a), sqrt(1-a));
    
                    return R * c;
                END;
        ';
    
        DB::unprepared($sql);
    
    }
    

    少し醜いですが、うまくいくようです...

    編集

    実際には、最初に実行されたときにのみ機能します。この関数はmysql関数をmysqlデータベースに保存できるようです。次回は「Mysql関数はすでに存在します」のようなエラーが発生します。上記のブロックにコメントする必要があります。




    1. SQLServerへの接続の確立中にネットワーク関連またはインスタンス固有のエラーが発生しました

    2. JPA:多対多の関係-JsonMappingException:無限再帰

    3. MySQLエラーコード:1030ストレージエンジンからエラー-1が発生しました。データベースからデータを削除しようとしました

    4. 3番目にグループ化された場合の別のフィールドの最小値に基づくMySQL更新フィールド