漏刻有时API接口实战开发系列(12):php-mysql语句开发

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
RDS AI 助手,专业版
RDS Agent(兼容OpenClaw),2核4GB
简介: 漏刻有时API接口实战开发系列(12):php-mysql语句开发

项目拓展性的重要标准就是API接口,根据项目的需要,实时开发对应API接口来延展项目的需求。本案例是多个项目开发经验的总结,便于后期复盘,汲取经验。


1.跨表查询API

下面API接口是一个综合性极强的API接口,涉及


跨表查询功能;

关键词筛选功能;

layui后台动态翻页功能;

public function getExpertMyProject()
    {
        global $db, $res;
        dbc();
        @$user_city = get_param("user_city");
        @$user_area = get_param("user_area");
        @$pro_category = get_param("pro_category");
        @$pro_name = get_param("pro_name");
        @$pro_serial = get_param("pro_serial");
        @$pro_declarant = get_param("pro_declarant");
        @$pro_condition = $_GET["pro_condition"];
        @$pro_types = $_GET["pro_types"];
        @$p = $_GET['page'] == "" ? 1 : $_GET['page'];
        @$pagesize = $_GET['limit'] == "" ? 15 : $_GET['limit'];
        @$limit = ($p - 1) * $pagesize;
        $sql = "select a.pro_id,a.user_id,MAX(a.ex_times) as ex_times,b.pro_id,b.pro_types,b.pro_audit,b.pro_name,b.pro_serial,b.pro_category,b.pro_condition,b.pro_declarant FROM " . $db->table('expert') . " AS a, " . $db->table('project') . " AS b WHERE a.user_id =" . $_COOKIE['user_id'] . " AND a.pro_id = b.pro_id ";
        if ($user_city != "") {
            $sql .= " AND a.user_city = '" . $user_city . "'";
        }
        if ($user_area != "") {
            $sql .= " AND a.user_city = b.user_city AND a.user_area = '" . $user_area . "'";
        }
        if ($pro_types != "") {
            $sql .= " AND b.pro_types = " . $pro_types;
        }
        if ($pro_condition != "") {
            $sql .= " AND b.pro_condition = " . $pro_condition;
        }
        if ($pro_category != "") {
            $sql .= " AND b.pro_category like '%" . $pro_category . "%'";
        }
        if ($pro_name != "") {
            $sql .= " AND b.pro_name like '%" . $pro_name . "%'";
        }
        if ($pro_serial != "") {
            $sql .= " AND b.pro_serial like '%" . $pro_serial . "%'";
        }
        if ($pro_declarant != "") {
            $sql .= " AND b.pro_declarant like '%" . $pro_declarant . "%'";
        }
        $sql .= " GROUP BY a.pro_id ORDER BY a.ex_id DESC LIMIT " . $limit . "," . $pagesize;
        $row = $db->queryall($sql);
        //获取总记录;
        $sql_c = "select a.pro_id,MAX(a.ex_times) AS ex_times,b.pro_id FROM " . $db->table('expert') . " AS a," . $db->table('project') . " AS b WHERE a.pro_id = b.pro_id";//  AND b.pro_status = 1
        //设置筛选条件;
        if ($_COOKIE['dbRoles'] == 2) {//县管理员
            $sql_c .= " AND a.user_city = b.user_city AND a.user_area = b.user_area";
        }
        if ($_COOKIE['dbRoles'] == 3) {//市管理员
            $sql_c .= " AND a.user_city = b.user_city";
        }
        if ($_COOKIE['dbRoles'] == 4) {//省管理员
            $sql_c .= " AND a.user_province = b.user_province";
        }
        if ($pro_types != "") {
            $sql_c .= " AND b.pro_types = " . $pro_types;
        }
        if ($pro_condition != "") {
            $sql_c .= " AND b.pro_condition = " . $pro_condition;
        }
        if ($user_city != "") {
            $sql_c .= " AND a.user_city = '" . $user_city . "'";
        }
        if ($user_area != "") {
            $sql_c .= " AND a.user_area = '" . $user_area . "'";
        }
        if ($pro_category != "") {
            $sql_c .= " AND b.pro_category like '%" . $pro_category . "%'";
        }
        if ($pro_name != "") {
            $sql_c .= " AND b.pro_name like '%" . $pro_name . "%'";
        }
        if ($pro_serial != "") {
            $sql_c .= " AND b.pro_serial like '%" . $pro_serial . "%'";
        }
        if ($pro_declarant != "") {
            $sql_c .= " AND b.pro_declarant like '%" . $pro_declarant . "%'";
        }
        $sql_c .= " GROUP BY a.pro_id ORDER BY a.ex_id DESC";
        $row_c = $db->queryall($sql_c);
        /*信息输出*/
        $res['code'] = 0;
        $res['msg'] = "OK";
        $res['count'] = count($row_c);
        $res["data"] = $row;
        die(json_encode_lockdata($res));
    }


2.地图下钻API接口

传递不同的地区参数,获取对应的区域数据。例如:省级–地市级,二级下钻。默认读取省级数据,当传递地级市名称的时候,获取区县级数据。

    public function getProjectMap()
    {
        global $db, $res;
        dbc();
        @$user_city = get_param("user_city");
        if ($user_city != "") {
            $sql = "select user_city,user_area,COUNT(CASE pro_status WHEN '2' THEN 2 END) AS total FROM " . $db->table('project') . " WHERE 1";
            $sql .= " AND user_city ='" . $user_city . "'";
            $sql .= " GROUP BY user_area";
        } else {
            $sql = "select user_city,COUNT(CASE pro_status WHEN '2' THEN 2 END) AS total FROM " . $db->table('project') . " WHERE 1";
            $sql .= " GROUP BY user_city";
        }
        $row = $db->queryall($sql);
        $res['msg'] = "OK";
        $res["data"] = $row;
        die(json_encode_lockdata($res));
    }


3.循环读取API

  //总站-城市站点排名信息表;
    public function getCityInfo()
    {
        global $db, $res;
        dbc();
        @$p = $_GET['page'] == "" ? 1 : $_GET['page'];//获取用户选择的页码
        @$pagesize = $_GET['limit'] == "" ? 10 : $_GET['limit'];//获取用户选择的每页显示多少条数据
        @$keys = $_GET['keys'];//站点Id
        @$fromTime = $_GET['fromTime'];//开始时间
        @$toTime = $_GET['toTime'];//结束时间
        @$limit = ($p - 1) * $pagesize;//偏移量
        //筛选全部记录并随前端自动分页展示;
        $sql = "select a.uniacid,a.name,a.dpopen,a.short_name from " . $db->table('set_basic') . " AS a where a.dpopen = 1";
        //按照站点筛选;
        IF ($keys != "") {
            $sql .= " AND a.uniacid = " . $keys;
        }
        $sql .= " ORDER BY a.uniacid DESC";
        $sql .= " LIMIT " . $limit . "," . $pagesize;
        $row = $db->queryall($sql);
        //获取总记录数量;
        $sql_c = "select a.uniacid,a.name,a.dpopen,a.short_name from " . $db->table('set_basic') . " AS a where a.dpopen = 1";
        //按照站点筛选;
        IF ($keys != "") {
            $sql_c .= " AND a.uniacid = " . $keys;
        }
        $sql_c .= " ORDER BY a.uniacid DESC";
        $row_c = $db->queryall($sql_c);
        $count = count($row_c);
        //获取对应站点的销量及对应的item;
        foreach ($row as $k => $v) {
            $sql_p = "select COUNT(a.id) AS transTotal,SUM(a.should_paid) AS totalPays,COUNT(DISTINCT a.user_id) AS totalUser,a.paid_at,a.uniacid,SUM(a.all_num) AS totalAmount from " . $db->table('orders') . " AS a";
            $sql_p .= " WHERE a.status <> '-128' AND a.uniacid =" . $v['uniacid'];//AND a.status <> '-126'
            //按照时间筛选;
            IF ($fromTime != "") {
                $sql_p .= " AND date_format(a.paid_at,'%Y-%m-%d') >= '$fromTime'";
            }
            IF ($toTime != "") {
                $sql_p .= " AND date_format(a.paid_at,'%Y-%m-%d') <= '$toTime'";
            }
            $sql_p .= " GROUP BY a.uniacid";
            $row[$k]["products"] = $db->queryall($sql_p);
        }
        //获取对应站点团长的数量;
        foreach ($row as $k => $v) {
            $sql_l = "select IFNULL(COUNT(id),0) AS leaderTotal from " . $db->table('leader');
            $sql_l .= " WHERE created_at <> '' AND uniacid =" . $v['uniacid'];//AND server = 1 AND legitimate = 1
            //按照时间筛选;
            IF ($fromTime != "") {
                $sql_l .= " AND date_format(created_at,'%Y-%m-%d') >= '$fromTime'";
            }
            IF ($toTime != "") {
                $sql_l .= " AND date_format(created_at,'%Y-%m-%d') <= '$toTime'";
            }
            $sql_l .= " GROUP BY uniacid";
            $row[$k]["leader"] = $db->queryall($sql_l);
        }
        //获取对应的站点会员数量;
        foreach ($row as $k => $v) {
            $sql_m = "select COUNT(id) AS memberTotal from " . $db->table('member');
            $sql_m .= " WHERE created_at <> '' AND legitimate = 1 AND uniacid =" . $v['uniacid'];
            //按照时间筛选;
            IF ($fromTime != "") {
                $sql_m .= " AND date_format(created_at,'%Y-%m-%d') >= '$fromTime'";
            }
            IF ($toTime != "") {
                $sql_m .= " AND date_format(created_at,'%Y-%m-%d') <= '$toTime'";
            }
            $sql_m .= " GROUP BY uniacid";
            $row[$k]["member"] = $db->queryall($sql_m);
        }
        $res['code'] = 0;
        $res['count'] = $count;
        $res['msg'] = "";
        $res["data"] = $row;
        die(json_encode_lockdata($res));
    }


4.日期条件筛选判断API

 //会员排名;
    public function getMemberRank()
    {
        global $db, $res;
        dbc();
        @$CR_days = $_POST['days'];
        @$limitNum = $_POST['limitNum'];
        if ($limitNum == "") {
            $limitNum = "10";
        }
        $sql = "select SUM(a.should_paid) AS totalPays,a.user_id,b.id,b.nickname as name from " . $db->table('orders');
        $sql .= " as a, " . $db->table('member') . " as b where b.id= a.user_id AND a.paid_at <> ''";
        switch ($CR_days) {
            case -1;
                $sql .= "  AND TO_DAYS(CURDATE()) - TO_DAYS(date_format(a.paid_at,'%Y-%m-%d')) = 1";
                break;
            case 0;
                $sql .= "  AND date_format(a.paid_at,'%Y-%m-%d') = CURDATE()";
                break;
            case 7;
                $sql .= "  AND DATE_SUB(CURDATE(), INTERVAL 6 DAY) <= date(a.paid_at)";
                break;
            case 30;
                $sql .= "  AND DATE_SUB(CURDATE(), INTERVAL 29 DAY) <= date(a.paid_at)";
                break;
            case 2;//本月,修改 BY jieji007,2020-08-31
                $sql .= "  AND date_format(a.paid_at,'%Y-%m') = date_format(CURDATE(),'%Y-%m')";
                break;
            case 3;//上月,修改 BY jieji007,2020-08-31
                $sql .= "  AND date_format(a.paid_at,'%Y-%m') = date_format(DATE_SUB(CURDATE(), INTERVAL 1 MONTH),'%Y-%m')";
                break;
            case "100";//全部信息;
                break;
            default:
                $sql .= "  AND date_format(a.paid_at,'%Y-%m-%d') = CURDATE()";
        }
        if (@$_COOKIE['Controller'] == "-1") {
            $sql .= " AND a.uniacid = " . $_COOKIE['uniacid'];
        }
        $sql .= " GROUP BY a.user_id ORDER BY totalPays DESC";
        $sql .= " LIMIT " . $limitNum;
        $row = $db->queryall($sql);
        $res["data"] = $row;
        die(json_encode_lockdata($res));
    }


5.数据更新API

通过该API实现对数据库数据进行增改删的动作。

    public function updateUser()
    {
        global $db, $res;
        dbc();
        @$user_id = get_param("user_id");
        @$user_name = get_param("user_name");
        @$user_phone = get_param("user_phone");
        @$user_roles = get_param("user_roles");
        @$user_surveyor_type = get_param("user_surveyor_type");
        @$user_expert_type = get_param("user_expert_type");
        @$user_manage_type = get_param("user_manage_type");
        @$user_source = get_param("user_source");
        $db->update('user', array('user_name' => $user_name, 'user_phone' => $user_phone, 'user_roles' => $user_roles, 'user_surveyor_type' => $user_surveyor_type, 'user_expert_type' => $user_expert_type, 'user_manage_type' => $user_manage_type, 'user_source' => $user_source), array("user_id" => $user_id));
        $res['msg'] = "OK";
        $res["data"] = $user_id . "-信息更新成功.";
        die(json_encode_lockdata($res));
    }


6.创建数据库分表API:

当数据超过一定的数据量时,需要对mysql数据库进行分库分表。

判断数据表名,是否重复

        $row = $db->fetch('subtables', '*', array('tb_name' => trim(addslashes($tb_name))), ' tb_id DESC');
        if ($row) {
            $res['code'] = 0;
            $res['msg'] = "数据表名已存在,请更换名称。";
            die(json_encode_lockdata($res));
        }

创建新的数据表

//创建分表;
        $sql = "CREATE TABLE IF NOT EXISTS `" . $CONF['db_prefix'] . $tb_name . "` (
        `res_id` int(10) NOT NULL COMMENT 'id',
        `room_id` int(11) DEFAULT NULL COMMENT '房间号',
        `data_id` varchar(64) DEFAULT NULL COMMENT '同步id',
        `room_lnglat` varchar(255) DEFAULT NULL,
         `room_address` varchar(255) DEFAULT NULL,
        `room_depart` varchar(255) DEFAULT NULL,
        `room_floor` varchar(64) DEFAULT NULL COMMENT '楼层',
        `room_num` varchar(255) DEFAULT NULL COMMENT '房号',
        `res_name` varchar(255) DEFAULT NULL COMMENT '姓名',
        `res_mobile` varchar(32) DEFAULT NULL COMMENT '手机',
        `res_persons` int(2) DEFAULT NULL COMMENT '被困人数',
        `res_task` varchar(255) DEFAULT NULL COMMENT '任务领取',
        `res_status` varchar(255) DEFAULT NULL COMMENT '救援情况',
        `user_name` varchar(10) DEFAULT NULL COMMENT '提交人',
        `submit_time` int(11) DEFAULT NULL COMMENT '提交时间',
        `update_time` int(11) DEFAULT NULL COMMENT '更新时间'
        ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='码上救援';";
        $row = $db->queryall($sql);
        $res['code'] = 1;
        $res['msg'] = "数据分表创建成功,请在conf/config中配置切换";
        die(json_encode_lockdata($res));


@lockdata.cn

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
8月前
|
缓存 监控 前端开发
顺企网 API 开发实战:搜索 / 详情接口从 0 到 1 落地(附 Elasticsearch 优化 + 错误速查)
企业API开发常陷参数、缓存、错误处理三大坑?本指南拆解顺企网双接口全流程,涵盖搜索优化、签名验证、限流应对,附可复用代码与错误速查表,助你2小时高效搞定开发,提升响应速度与稳定性。
|
8月前
|
JSON 算法 API
Python采集淘宝商品评论API接口及JSON数据返回全程指南
Python采集淘宝商品评论API接口及JSON数据返回全程指南
|
8月前
|
JSON API 数据安全/隐私保护
Python采集淘宝拍立淘按图搜索API接口及JSON数据返回全流程指南
通过以上流程,可实现淘宝拍立淘按图搜索的完整调用链路,并获取结构化的JSON商品数据,支撑电商比价、智能推荐等业务场景。
|
9月前
|
JSON 前端开发 API
如何调用体育数据足篮接口API
本文介绍如何调用体育数据API:首先选择可靠服务商并注册获取密钥,接着阅读文档了解基础URL、端点、参数及请求头,然后使用Python等语言发送请求、解析JSON数据,最后将数据应用于Web、App或分析场景,同时注意密钥安全、速率限制与错误处理。
942 152
|
8月前
|
API 开发者 数据采集
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
2025反向海淘新机遇:依托代购系统,聚焦小众垂直品类,结合Pandabay数据选品,降本增效。系统实现智能翻译、支付风控、物流优化,助力中式养生茶等品类利润翻倍,新手也能快速入局全球市场。
高效获取淘宝商品详情:API 开发实现链接解析的完整技术方案
|
9月前
|
数据采集 缓存 API
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
本文详解小红书笔记详情API的开发对接、实战场景与收益模式,涵盖注册避坑、签名生成、数据解析全流程,并分享品牌营销、内容创作、SAAS工具等落地应用,助力开发者高效掘金“种草经济”。
小红书笔记详情 API 实战指南:从开发对接、场景落地到收益挖掘(附避坑技巧)
|
8月前
|
存储 缓存 算法
淘宝买家秀 API 深度开发:多模态内容解析与合规推荐技术拆解
本文详解淘宝买家秀接口(taobao.reviews.get)的合规调用、数据标准化与智能推荐全链路方案。涵盖权限申请、多模态数据清洗、情感分析、混合推荐模型及缓存优化,助力开发者提升审核效率60%、商品转化率增长28%,实现UGC数据高效变现。
|
8月前
|
人工智能 自然语言处理 测试技术
Apipost智能搜索:只需用业务语言描述需求,就能精准定位目标接口,API 搜索的下一代形态!
在大型项目中,API 数量庞大、命名不一,导致“找接口”耗时费力。传统工具依赖关键词搜索,难以应对语义模糊或命名不规范的场景。Apipost AI 智能搜索功能,支持自然语言查询,如“和用户登录有关的接口”,系统可理解语义并精准匹配目标接口。无论是新人上手、模糊查找还是批量定位,都能大幅提升检索效率,降低协作成本。从关键词到语义理解,智能搜索让开发者少花时间找接口,多专注核心开发,真正实现高效协作。
|
8月前
|
存储 缓存 算法
亚马逊 SP-API 深度开发:关键字搜索接口的购物意图挖掘与合规竞品分析
本文深度解析亚马逊SP-API关键字搜索接口的合规调用与商业应用,涵盖意图识别、竞品分析、性能优化全链路。通过COSMO算法解析用户购物意图,结合合规技术方案提升关键词转化率,助力卖家实现数据驱动决策,安全高效优化运营。
|
9月前
|
人工智能 运维 监控
阿里云 API 聚合实战:破解接口碎片化难题,3 类场景方案让业务响应提速 60%
API聚合破解接口碎片化困局,助力开发者降本增效。通过统一中间层整合微服务、第三方接口与AI模型,实现调用次数减少60%、响应提速70%。阿里云实测:APISIX+函数计算+ARMS监控组合,支撑百万级并发,故障定位效率提升90%。
672 0

推荐镜像

更多