如何使用if子句从数据库中获取数据(SQL查询)

时间:2017-06-13 09:26:15

标签: php mysql codeigniter

假设我有一个如下表:

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中检索最新数据,但是如果数据类型=具有状态的食物处于活动状态,则使用status = active的数据,但如果没有活动状态则使用最后一个数据

我应该使用什么SQL查询?

7 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

从TabelName中选择*,其中status =“Active”

答案 2 :(得分:0)

在ORDER BY中使用where子句:

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

答案 3 :(得分:0)

请使用下面提到的查询。

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

答案 4 :(得分:0)

如果我理解正确的话,你想要获取最新数据,如果全部没有活动,但是如果有活跃状态你想要那些吗?

试试这个

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);

答案 5 :(得分:0)

 $where = array('status'=>'Active' ,'type' =>'Food');
 $this->db->where($where);
 $this->db->order_by('Date','ASC');
 $this->db->get('_table_name');

答案 6 :(得分:-1)

尝试以下查询

select * from table_name where Status='Active';