[英]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.