使用MYSQL中的CASE函数和Zend_DB_Expr

时间:2010-12-06 16:08:51

标签: zend-framework zend-db

我遇到了以下问题。在我的产品表中,我有两列

Date_start和Date_end(它们都是我表中的DATE数据类型)。

我想检查当前日期是否在Date_start和Date_end之间,那么状态必须是“不可用”,否则它必须具有“可用”状态。

如何在Zend_Db_Expr中修复它?

我现在有以下查询。

$getProducts = $this->oSelect
                            ->from(array('p'=>'producten'))
                            ->columns(array('link' => "CONCAT('/t/', p.titel_key)"))
                            ->joinLeft(array('c'=>'categorie'),'p.categorie_id = c.id',array('cat_titel'=>'c.titel'))
                            ->joinLeft(array('sc'=>'subcategorie'),'p.subcategorie_id = sc.id', array('subcat_titel'=>'sc.titel'))
                            ->where('p.online = 1');

1 个答案:

答案 0 :(得分:3)

在你的专栏中:

->columns(array('link' => "CONCAT('/t/', p.titel_key)",
  'status' => new Zend_Db_Expr("...")))

'CASE'应该看起来像这样(为了便于阅读,我将其分开);

CASE WHEN p.Date_end < NOW() AND p.Date_start > NOW() 
THEN 'not available' ELSE 'available' END

Zend_Db_Expr将接受您提供的任何内容并按字面意思使用它。请记住,如果由于某种原因您切换系统,任何特定于DB的命令都可能会中断。