2010-12-06 49 views
0

Je suis bloqué avec le problème suivant. Dans ma table de produit j'ai deux colonnesUtilisation de la fonction CASE dans MYSQL avec Zend_DB_Expr

Date_start et Date_end (les deux sont un type de données DATE dans ma table).

Je veux vérifier si la date actuelle est entre Date_start et Date_end alors le statut doit être 'non disponible', sinon il doit avoir le statut 'disponible'.

Comment puis-je corriger cela dans Zend_Db_Expr?

J'ai maintenant la requête suivante.

$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'); 

Répondre

3

Dans vos colonnes:

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

Le 'cas' devrait ressembler à quelque chose comme ça (je le diviser pour une meilleure lisibilité);

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

Zend_Db_Expr prendra tout ce que vous lui donnez et l'utilisera littéralement. N'oubliez pas que toutes les commandes spécifiques à la base de données peuvent être interrompues si, pour une raison quelconque, vous changez de système.

+0

Merci Darryl je vais l'essayer et le comprendre par lui-même. – Navid

+0

"N'oubliez pas que toutes les commandes spécifiques à une base de données peuvent être interrompues si, pour une raison quelconque, vous changez de système." Pouvez-vous m'en dire plus à ce sujet? Je veux juste faire ceci: "/>' dans une vue mais je viens d'avoir un "NOW()" littéral et pas une date, j'ai dû désinstaller PHP + MySQL et réinstaller pour d'autres raisons Pourquoi mon Zend_Db_Expr() ne fonctionne pas? ! – Metafaniel