2

我在查询我的数据时遇到了麻烦。我不知道从哪里开始查询 if else 中的 if 条件。

问题是:如何查询它的type = cpm and end_date < now()然后将结果值类型更改为before,如果它的type = cpm and end_date > now()然后将结果值类型更改为after。我在表中有一个数据,结果如下:

在此处输入图像描述

我想得到如下结果:

Array(
  [0] => Array
        (
            [id] => 1
            [type] => free
            [end_date] => 2013-06-20
        )
  [1] => Array
        (
            [id] => 4
            [type] => after
            [end_date] => 2013-08-29
        )
  [2] => Array
        (
            [id] => 5
            [type] => before
            [end_date] => 2013-06-20
        )
)

提前致谢。

4

3 回答 3

7

像这样的东西应该工作:

select 
  id, 
  case 
    when (type = 'cpm' and end_date < now()) then 'before' 
    when (type = 'cpm' and end_date > now()) then 'after' 
    else type
  end as type, 
  end_date
from my_table;
于 2013-08-26T04:13:24.447 回答
2

你可以使用 MySQL CASE- http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#operator_case

CASE
WHEN `type` = 'cpm' AND `end_date` < NOW() THEN 'before'
WHEN `type` = 'cpm' AND `end_date` > NOW() THEN 'after'
ELSE `type`
END as `type`
于 2013-08-26T04:12:53.900 回答
2

您可以为此使用 WHEN .. CASE 。

这是您的解决方案 SQLfiddle的链接

于 2013-08-26T04:35:21.787 回答