Tp3.2 组合查询

// $where[‘status‘] = 6;
// // or
// $where[‘final_price‘] = [‘gt‘, 0];
// $where[‘status‘] = 4;

$where[‘_string‘] = ‘ (status = 6)  OR ( status = 4 AND final_price > 0) ‘;

用string最好实现了!

请欣赏优美的代码!

/**
 * 获取订单列表
 */
public function getOrderList()
{
    if (!$type = $_POST[‘type‘]) { // 1 待上门 2 待报价 3 待确认 4 待服务 5 待支付 6 已完成 7 已取消
        $this->json->E(‘缺少参数‘);
    }
    if (!in_array($type, [1, 2, 3, 4, 5, 6, 7])) {
        $this->json->E(‘类型数值有误‘);
    }

    if (!isset($_POST[‘page‘]) || $_POST[‘page‘] < 1) {
        $_POST[‘page‘] = 1;
    }

    if (!isset($_POST[‘page_size‘]) || $_POST[‘page_size‘] < 1) {
        $_POST[‘page_size‘] = C(‘PAGE_NORMAL_COUNT‘);
    }

    $where[‘master_uid‘] = $this->uid;

    switch ($type) {
        case 1:
            $where[‘status‘] = 3;
            break;
        case 2:
            $where[‘final_price‘] = 0; // 报价服务
            $where[‘status‘] = 4;
            break;
        case 3:
            $where[‘status‘] = 5;
            break;
        case 4:
            // $where[‘status‘] = 6;
            // // or
            // $where[‘final_price‘] = [‘gt‘, 0];
            // $where[‘status‘] = 4;

            $where[‘_string‘] = ‘ (status = 6)  OR ( status = 4 AND final_price > 0) ‘;
            break;
        case 5:
            $where[‘status‘] = 7;
            break;
        case 6:
            $where[‘status‘] = 8;
            break;
        case 7:
            $where[‘status‘] = [‘lt‘,0];
            break;
    }

    $page = $_POST[‘page‘];
    $page_size = $_POST[‘page_size‘];

    // 获取总数
    $service_order = M(‘service_order‘);
    $count = $service_order->where($where)->count();
    $total_page = ceil($count / $page_size);

    if ($page > $total_page) {
        $this->json->setErr(0, ‘没有更多了‘);
        $return_data = [‘data_list‘ => [], ‘total_page‘ => $total_page, ‘current_page‘ => $page];
        $this->json->setAttr(‘data‘, $return_data);
        $this->json->Send();
    }

    $data_list = $service_order->where($where)
        ->order(‘id desc‘)
        ->limit((($page - 1) * $page_size) . ‘,‘ . $page_size)
        ->select();

    $serviceService = new ServiceService();
    if ($data_list) {
        // 获取服务信息
        $service = M(‘service‘);
        $service_type = M(‘service_type‘);
        $tmp_list = [];
        foreach ($data_list as $k => &$v) {
            $tmp = [];
            // 订单id、订单号
            $tmp[‘id‘] = $v[‘id‘];
            $tmp[‘order_num‘] = $v[‘order_num‘];

            // 地址信息
            $tmp[‘address‘] = $serviceService->getAddressFromJson($v[‘address_json‘]);

            // 上门时间
            $tmp[‘visit_date‘] = $serviceService->getVisitDate($v[‘order_visit_time‘]);
            $tmp[‘visit_section‘] = $v[‘order_visit_section‘];

            // 预计佣金
            if ($type != 7) {
                $tmp[‘commission_price‘] = $serviceService->getCommissionFromOrder($v);
            }

            // 类别
            $service_info = $service->where([‘id‘ => $v[‘service_id‘]])->find();
            $tmp[‘type_name‘] = $service_type->where([‘id‘ => $service_info[‘type_id‘]])->getField(‘name‘);

            // 下单时间
            $tmp[‘first_pay_time‘] = date(‘Y-m-d H:i‘, $v[‘first_pay_time‘]);

            $tmp[‘is_quote‘] = $v[‘final_price‘] == 0 ? 1 : 0;

            $tmp[‘status‘] = $v[‘status‘];
            $tmp[‘status_str‘] = $serviceService->getOrderStatus($v[‘status‘], $tmp[‘is_quote‘]);

            $tmp_list[] = $tmp;
        }
    }

    $out_data = $tmp_list ?: [];
    $return_data = [‘data_list‘ => $out_data, ‘total_page‘ => $total_page, ‘current_page‘ => $page];
    $this->json->S($return_data);
}

原文地址:https://www.cnblogs.com/jiqing9006/p/12576479.html

时间: 2024-11-09 02:05:03

Tp3.2 组合查询的相关文章

webform:分页组合查询

一个简单的分页组合查询页面 /// <summary> /// 查询方法 /// </summary> /// <param name="tsql">SQL语句</param> /// <param name="hh">哈希表</param> /// <returns></returns> public List<Goods> Select(string un

WebForm 分页与组合查询

1.封装实体类 2.写查询方法 //SubjectData类 public List<Subject> Select(string name) { List<Subject> list = new List<Subject>(); cmd.CommandText = "select *from Subject where SubjectName like @a "; cmd.Parameters.Clear(); cmd.Parameters.Add

ADO.NET组合查询及其分页合并

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server&quo

webform(八)组合查询

组合查询就是根据条件取出某些数据并展示出来. 前台代码 <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> <title>组合查询</title> &l

WebForm组合查询

封转类 using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary> /// Car 的摘要说明 /// </summary> public class Car { public int ids{get;set;} public string code{get;set;} public string name{get;set;} public st

组合查询和分页

组合查询和分页的核心思想就是拼接SQL语句,根据自己想要显示的内容写出SQL语句查询显示. 组合查询和分页小练习: Model: 1 private string _Code; 2 /// <summary> 3 /// 编号 4 /// </summary> 5 public string Code 6 { 7 get { return _Code; } 8 set { _Code = value; } 9 } 10 private string _Name; 11 /// &l

佩特来项目经验小集合(2)___组合查询存储过程,报错 &amp;quot;varchar JBID=&amp;#39;&amp;#39; 转换成数据类型 int 时失败&amp;quot;

今天写一个组合查询的存储过程遇到这样一个问题:在将 varchar 值 'SELECT * FROM View_DLS_WXJD_Customer WHERE 1=1 and JBID ='' 转换成数据类型 int 时失败.错误详情如图所看到的: 经百度:字符串变量和整型变量连接不能用+连接. 于是我採用cast()函数将DLSJB这个整型变量转换成字符串,这样问题就攻克了. 正确代码例如以下所看到的: ALTER PROCEDURE [dbo].[Proc_SH_WXJDList] @DH

重构之路 组合查询之传参+存储过程

上篇博文给大家一起讨论了实现组合查询的一种方法,即在U层将select语句的where子句部分组装好,赋给一个字符串变量,传到D层然后与select子句组成完整的sql语句,之后执行,返回查询结果,就是这么简单,但是博文的结尾也留下了一个疑问,这种方法的安全性有点欠佳,有没有相对好一点的办法呢? 答案是肯定的,这次我们一起来看看我实现的另一种方法.首先给大家简单介绍一下这种方法的思路,其实也比较简单,最初我是想在程序代码里写sql查询语句的,然后将组合查询的各个条件的值当做实体参数(现在实体层定

重构之路 组合查询之传递SQL字符串

既然是使用VB.NET语言对机房收费系统进行重构,那么无可避免的要去解决组合查询的问题,在VB版的实现中这是一个难点,不过大家还是依靠自己或者共同的智慧解决了这个看似复杂的问题. 如今编程的语言不同是一方面,更重要的是系统的结构不一样了,采用了三层架构去实现系统,这样一来就要考虑组合查询的在三层结构中的实现方法.当然,组合查询的核心办法是不变的,都是通过将查询的各个条件组装成SQL查询语句的where子句来实现的,问题就是这个where子句的组装在哪里完成? 如果放在U层完成,那么我们向下传递的