zoukankan      html  css  js  c++  java
  • mysql 巧用存储过程

    根据距离排序

    CREATE DEFINER=`ln` PROCEDURE `Proc_4`(IN `lon1` double,IN `lat1` double,IN `PageStart` int,IN `PageStep` int,IN `type` int,IN `uniacid1` int)
    BEGIN
    select merchname,address,lng,lat,ser.*, ROUND(
    
            6378.138 * 2 * ASIN(
    
                SQRT(
    
                    POW(
    
                        SIN(
    
                            (
    
                                lat1 * PI() / 180 - lat * PI() / 180
    
                            ) / 2
    
                        ),
    
                        2
    
                    ) + COS(lat1 * PI() / 180) * COS(lat * PI() / 180) * POW(
    
                        SIN(
    
                            (
    
                                lon1 * PI() / 180 - lng * PI() / 180
    
                            ) / 2
    
                        ),
    
                        2
    
                    )
    
                )
    
            ) * 1000
    
        ) AS juli from merch_service  as ser
    inner join merch on ser.merchid=merch.id
    where merch.`status` in (1,3)
    and ser.type=type
    and ser.uniacid=uniacid1
    and merch.uniacid=uniacid1
    ORDER BY  juli asc
    LIMIT PageStart,PageStep;
    END

    复杂点可以用

    CREATE DEFINER=`ln` PROCEDURE `Proc_3`(IN `lon1` double,IN `lat1` double,IN `PageStart` int,IN `PageStep` int,IN `type` varchar(20),IN `uniacid` int,IN `iscommand` int,IN `distance` int)
    BEGIN
    IF iscommand = 0 THEN  
        set @isCommand= ' order by juli asc';  
    ELSE  
        set @isCommand= ' order by isrecommand desc ,juli asc';  
    END IF;
    IF distance = 0 THEN  
        set @distance= ' ';  
    ELSE  
        set @distance= CONCAT(' and `juli` <= ', distance);  
    END IF;
    set @type = CONCAT('%',type,'%');
    set @_where = " where `status` IN(1,3)";
    set @_where = CONCAT(@_where,' AND `diyformdata` like "',@type,'"');
    set @_where = CONCAT(@_where,' AND `uniacid` = ', uniacid);
    set @_where = CONCAT(@_where,@distance);
    set @sql = CONCAT(
    "SELECT * FROM
    (SELECT 
        *,
    
        ROUND(
    
            6378.138 * 2 * ASIN(
    
                SQRT(
    
                    POW(
    
                        SIN(
    
                            (
    
                                ",lat1," * PI() / 180 - lat * PI() / 180
    
                            ) / 2
    
                        ),
    
                        2
    
                    ) + COS(",lat1," * PI() / 180) * COS(lat * PI() / 180) * POW(
    
                        SIN(
    
                            (
    
                                ",lon1," * PI() / 180 - lng * PI() / 180
    
                            ) / 2
    
                        ),
    
                        2
    
                    )
    
                )
    
            ) * 1000
    
        ) AS juli
    
    FROM
    
        merch)a ");
    set @sql = CONCAT(@sql,@_where,@isCommand, ' limit ', PageStart, ',', PageStep);
    prepare stmt from @sql; -- 预编释一下。 “stmt”预编释变量的名称,  
    execute stmt; -- 执行SQL语句  
    deallocate prepare stmt; -- 释放资源  
    
    END
  • 相关阅读:
    JavaScript 为字符串添加样式 【每日一段代码80】
    JavaScript replace()方法 【每日一段代码83】
    JavaScript for in 遍历数组 【每日一段代码89】
    JavaScript 创建用于对象的模板【每日一段代码78】
    html5 css3 新元素简单页面布局
    JavaScript Array() 数组 【每日一段代码88】
    JavaScript toUTCString() 方法 【每日一段代码86】
    位运算
    POJ 3259 Wormholes
    POJ 3169 Layout
  • 原文地址:https://www.cnblogs.com/kkform/p/9236171.html
Copyright © 2011-2022 走看看