【问题标题】:How to get data from database with if clause (SQL query)如何使用 if 子句从数据库中获取数据(SQL 查询)
【发布时间】:2017-06-13 09:26:14
【问题描述】:

假设我有一个如下表:

Table name: trial

ID | Date        | Name | Status     | Type
1  | 2017-06-01  | ABC  | Not Active | Food
2  | 2017-06-02  | DEF  | Not Active | Food
3  | 2017-06-03  | GHI  | Active     | Food

为了从上表中检索最后一个 type = FOOD 的数据,我使用了这个查询

SELECT * FROM `trial` WHERE type = 'FOOD' order by id DESC limit 1

如果我想从 type = FOOD 中检索最新数据,但如果存在 status = active 的数据,则获取此数据。

假设表格条件是这样的。

ID | Date        | Name | Status     | Type
1  | 2017-06-01  | ABC  | Active     | Food
2  | 2017-06-02  | DEF  | Not Active | Food
3  | 2017-06-03  | GHI  | Not Active | Food

我使用这样的查询

SELECT * FROM `trial` WHERE type = 'FOOD' AND status = 'ACTIVE' order by id DESC limit 1

但是如果表格条件随着这个假设而改变呢?

ID | Date        | Name | Status     | Type
1  | 2017-06-01  | ABC  | Not Active | Food
2  | 2017-06-02  | DEF  | Not Active | Food
3  | 2017-06-03  | GHI  | Not Active | Food

如何从 type = FOOD 检索最新数据,但如果数据 type = food with status is active,则使用 status = active 的数据,但如果没有 active 状态则使用最后一个数据

我应该使用什么 sql 查询?

【问题讨论】:

  • select * from your_table where status='Active';
  • 我想要的不仅仅是活动状态而已
  • 然后通过 select * from your_table group by status 去分组
  • 要从状态处于活动状态的表中选择最新数据,您应该使用select * from your_table where status='Active' order by ID desc

标签: php mysql codeigniter


【解决方案1】:

如果我对你的理解正确,你想获取最新的数据,如果有所有不活动,但如果有活动状态你想要那些?

试试这个

Select * from your_table
WHERE Type = 'Food' 
ORDER BY Status != "Active" ASC, Date DESC
LIMIT 1

或在 Codeigniters Querybuilder 中

$this->db
    ->select("*")
    ->from("your_table")
    ->where("Type","Food")
    ->order_by("Status != 'Active'", "ASC")
    ->order_by("Date","DESC")
    ->limit(1);

【讨论】:

  • 我更新了我的问题,抱歉我之前的问题与我的意思不符
  • 这正是我在这里展示给你的——你测试了吗?因为我的查询采用这种方法 - 如果你有一个活动状态 - 它会接受它 - 否则它会采用最新条目
【解决方案2】:

首先你学习这本手册manual.. 本手册将帮助你从数据库中检索数据。

您可以使用select 命令和DESC 从数据库中获取数据以获取最新记录

select * from table_name where Status='Active' ORDER BY id DESC;;

【讨论】:

  • 我更新了我的问题,抱歉我之前的问题与我的意思不符
【解决方案3】:

select * from TabelName where status="Active"

【讨论】:

  • 我更新了我的问题,抱歉我之前的问题与我的意思不符
【解决方案4】:

在 ORDER BY 中使用 where 子句:

select * from table_name where Status='Active' ORDER BY id DESC;

【讨论】:

  • 我更新了我的问题,抱歉我之前的问题与我的意思不符
【解决方案5】:

请使用下面提到的查询。

SELECT * from table_name WHERE Status='Active' AND Type='Food' ORDER BY id DESC;

【讨论】:

  • 我更新了我的问题,抱歉我之前的问题与我的意思不符
【解决方案6】:
 $where = array('status'=>'Active' ,'type' =>'Food');
 $this->db->where($where);
 $this->db->order_by('Date','ASC');
 $this->db->get('_table_name');

【讨论】:

  • 我更新了我的问题,抱歉我之前的问题与我的意思不符
【解决方案7】:

试试下面的查询

select * from table_name where Status='Active';

【讨论】:

    猜你喜欢
    • 2021-09-14
    • 2014-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多