2014-04-16 138 views
1

在分配where条件之前,如何在mysql中检查if else条件?我需要查询以下逻辑。我使用php代码来显示我想要做什么。我需要一个MySQL查询来替换if其他的PHP代码。我想知道如果我们可以做,如果类型等于1然后做这个别做这个和类型是表的列。如何在mysql中使用if语句?

$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 
+0

什么是阻止你在PHP中建立条件? –

+1

为什么在两种情况下使用type = 1 –

+0

WHERE(type = 1 AND early> $ days)OR(type = 2 AND last> $ days)?虽然这个问题没有意义。你的桌子是什么样的?你真的想从中得到什么? – shapeshifter

回答

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 

您可以将这些说明与somet结合起来兴象EXECUTE或本eval函数: 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; 

我会说这是不是很“传统”。

有probalby更好,更可持续的方式来做你所需要的。