如何在分配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
答案 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;
我想说这不是非常“传统”的东西。
有一种更好,更有效的方式来做你需要的事情。