【问题标题】:Query with multiple WHERE and CASE PHP(CodeIgniter) MySQL查询多个 WHERE 和 CASE PHP(CodeIgniter) MySQL
【发布时间】:2020-04-21 04:55:41
【问题描述】:

我想从 m_period强>表

这是 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 ? 有人可以帮我吗,该怎么做?

注意:我将当前术语存储在会话中

【问题讨论】:

    标签: php mysql codeigniter


    【解决方案1】:

    你可以使用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()来组合数组。

    $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;
    }
    

    【讨论】:

    • 谢谢,这可能行得通,但我想知道它是否可以在一个函数中完成,一个查询下一个问题是如何将这两个结果连接到一个输出数据中,我将使用下拉列表的输出html列表顺便说一句
    • 我尝试了你的一种查询方法,但结果没有任何结果,然后我通过使用 or_where_in() 而不是 where 对其进行了一些修改,然后它就可以工作了,谢谢 :)
    • 您能编辑我的答案吗?然后,有相同问题的人可能会觉得这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-01-16
    • 2022-01-24
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2013-05-23
    • 2013-02-22
    • 1970-01-01
    相关资源
    最近更新 更多