如何在mysql中使用if else语句?

时间:2014-04-16 07:01:41

标签: php mysql continuous-integration

如何在分配if else条件之前检查mysql中的where条件?我需要查询以下逻辑。我使用PHP代码只是为了表明我想做什么。我需要一个mysql查询替换if else php代码。我想知道如果类型等于1我们是否可以做,然后执行此操作,并且type是表的列。

$this->db->select('startdate, enddate, type');
$this->db->from('db_date')
$this->db->where('id !=', $id);

if(`type`=1){
  $this->db->where("`early` <= ABS(DATEDIFF(STR_TO_DATE(`startdate`, '%m-%d-%Y'),        CURDATE())/30)");
} else if(`type`=2){
  $this->db->where("`last` >= ABS(DATEDIFF(STR_TO_DATE(`startdate`, '%m-%d-%Y'), CURDATE())/30)");
}else do nothing 

1 个答案:

答案 0 :(得分:1)

您使用CASE WHEN

 SELECT CASE 1 WHEN 1 THEN 'one'
    WHEN 2 THEN 'two' ELSE 'more' END;
    'one'

SELECT CASE WHEN 1>0 THEN 'true' ELSE 'false' END;
     'true'

SELECT CASE BINARY 'B'
     WHEN 'a' THEN 1 WHEN 'b' THEN 2 END;
    NULL

您还可以使用内联(和嵌套)IF

SELECT IF(score > 100, 100, IF(score < 0, 0, score)) FROM exam_results

IF + WHERE子句的样本:

SELECT ...
 WHERE ...
 AND IF(myfield = 'somevalue', 1, 0) = 1

您可以将这些说明与EXECUTE或此评估函数结合使用: http://code.openark.org/blog/mysql/mysql-eval

结果类似于:

  SELECT CASE 1 WHEN 1 THEN <call eval making a select with one type of where>
        WHEN 2 THEN <call eval making a select with another type of where> END;

我想说这不是非常“传统”的东西。

有一种更好,更有效的方式来做你需要的事情。