繁体   English   中英

查询多个 WHERE 和 CASE PHP(CodeIgniter) MySQL

[英]Query with multiple WHERE and CASE PHP(CodeIgniter) MySQL

我想从m_period表中 select 当前任期的所有期间(如现在 FY80)+ 上一任期(FY79)的3 个期间

这是m_period的表格:

+----+------+-------------+--------+
| id | term | period      | status |
+----+------+-------------+--------+
|  1 | FY79 | 79::2020/01 | close  |
|  2 | FY79 | 79::2020/02 | close  |
|  3 | FY79 | 79::2020/03 | close  |
|  4 | FY79 | 79::2020/04 | close  |
|  5 | FY79 | 79::2020/05 | close  |
|  6 | FY79 | 79::2020/06 | close  |
|  7 | FY80 | 80::2020/07 | open   |
|  8 | FY80 | 80::2020/08 | open   |
|  9 | FY80 | 80::2020/09 | open   |
| 10 | FY80 | 80::2020/10 | open   |
| 11 | FY80 | 80::2020/11 | open   |
| 12 | FY80 | 80::2020/12 | open   |
| 13 | FY80 | 80::2021/01 | open   |
| 14 | FY80 | 80::2021/02 | open   |
| 15 | FY80 | 80::2021/03 | open   |
| 16 | FY80 | 80::2021/04 | open   |
| 17 | FY80 | 80::2021/05 | open   |
| 18 | FY80 | 80::2021/06 | open   |
+----+------+-------------+--------+

我的 php 脚本从这里卡住:

<?php

function getPeriod()
{
    $prev_term = (int)substr($this->session->userdata('term'),2,2) - 1;
    $this->db->select('period');
    $this->db->where('term', $this->session->userdata('term'));
    $this->db->where('term', $prev_term);
    $this->db->order_by('period', 'ASC');
    return $this->db->get('m_period')->result_array();
}

我已阅读 CI 文档,但找不到如何在 codeigniter 中使用 CASE,或者还有其他方法可以代替 CASE? 有人可以帮助我,怎么做?

注意:我将当前期限存储在 session

您可以使用limit()方法。

然后,你必须有两个独立的功能。

function getPrevPeriod()
{
    $prev_term = (int)substr($this->session->userdata('term'),2,2) - 1;
    $this->db->select('period');
    $this->db->where('term', $prev_term);
    $this->db->order_by('period', 'ASC');
    $this->db->limit(3);
    return $this->db->get('m_period')->result_array();
}

function getCurrentPeriod()
{
    $this->db->select('period');
    $this->db->where('term', $this->session->userdata('term'));
    $this->db->order_by('period', 'ASC');
    return $this->db->get('m_period')->result_array();
}

然后可以使用array_merge()来组合 arrays。

$periods = array_merge($prev, $current);

编辑:一个查询

function getPeriod()
{
    $prev_term = (int)substr($this->session->userdata('term'),2,2) - 1;
    $this->db->select('term','period');
    $this->db->or_where_in('term',[$this->session->userdata('term'),$prev_term])
    $this->db->order_by('period', 'ASC');
    $result = $this->db->get('m_period')->result_array();
    $output = [];
    $n = 0;
    foreach($result as $row){
         if($row["term"] == $prev_term){
              if($n <= 3){
                   $output[] = $row;
                   $n++;
              }
         }else{
              $output[] = $row;
         }
    }

    return $output;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM