Использование функции CASE в MYSQL с Zend_DB_Expr - PullRequest
0 голосов
/ 06 декабря 2010

Я застрял со следующей проблемой. В моей таблице продуктов у меня есть две колонки

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 Ответ

3 голосов
/ 06 декабря 2010

В ваших столбцах:

->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 будет принимать все, что вы ему дадитеи использовать это буквально.Просто помните, что любые конкретные команды БД могут прерваться, если по какой-то причине вы переключаете системы.

...