2010-09-03 8 views
0

J'essaie d'incorporer une instruction IF dans mes critères de propulsion. Ceci est la façon dont je construis mes critères:Instruction IF dans Propel sélectionner les critères

$c = is_object($c) ? $c : new Criteria(); 
$c->addSelectColumn("CONCAT(DAYOFYEAR(" . SomePeer::CREATED_AT . "), ' ', YEAR(" . SomePeer::CREATED_AT . ")) AS period"); 
$c->addSelectColumn("COUNT(" . SomePeer::ID . ") AS registrations"); 
$c->addSelectColumn("COUNT(IF(" . SomePeer::JOIN . " > 0 AND " . SomePeer::JOIN . " < 3, 1, NULL)) AS coreg"); 
$c->addJoin(SomePeer::IDENTIFIER, self::TRACKING_IDENTIFIER); 
$c->add(SomePeer::ASSOCIATE_ID, $user->getId()); 
$c->addJoin(self::USER_ID, SomePeer::ID); 
$c->addJoin(SomePeer::ID, SomePeer::USER_ID); 
$c->add(SomePeer::CREDENTIAL, 'student'); 
$c->addJoin(SomePeer::PROFILE_ID, SomePeer::ID); 

Cependant lors de l'inspection SQL résultante je reçois le texte suivant:

SELECT CONCAT(MONTHNAME(some_table.CREATED_AT), ' ', YEAR(some_table.CREATED_AT)) AS period, COUNT(some_table.ID) AS registrations, COUNT(IF(some_table.JOIN > 0 AND some_table.JOIN < 3, 1, NULL)) AS coreg 
FROM `some_table`, `>` `0` `AND` `some_table`, `some_table`, `some_table`, `some_table`, `some_table` 
WHERE some_table.ASSOCIATE_ID=:p1 
AND some_table.CREDENTIAL=:p2 
AND some_table.IDENTIFIER=some_table.TRACKING_IDENTIFIER 
AND some_table.STUDENT_USER_ID=some_table.ID 
AND some_table.ID=some_table.USER_ID 
AND some_table.PROFILE_ID=some_table.ID 
# Params: some_table.ASSOCIATE_ID => 6, some_table.CREDENTIAL => 'credential'" 

En fait, comme vous pouvez le voir, la d'une partie de la requête est tout faux. Je suppose que propel a confondu une partie de l'instruction IF dans COUNT en tant que noms de table et les a inclus dans la partie FROM de la requête. Est-ce que quelqu'un a eu des idées sur la façon dont je pourrais contourner ce problème ou est-ce que quelqu'un a même été capable de faire quelque chose pour travailler?

Merci pour votre aide,

Vincent

Répondre

0

On dirait que le problème est avec le nom JOIN. Utilisez-vous "join" comme nom de domaine ??? Essayez un nom différent ici.

+0

Le nom du champ Désolé est JOIN_XYZ supprimé la dernière partie pour raccourcir le code sans penser aux noms réservés. – luxerama

+0

Pas sûr mais essayez ceci: $ c-> addSelectColumn ("COUNT (". SomePeer :: ID. ") AS enregistrements"); $ c-> addSelectColumn (SomePeer :: ID); $ c-> addSelectColumn ("COUNT (IF (". SomePeer :: JOIN_XYZ. "> 0 ET". SomePeer :: JOIN_XYZ. "<3, 1, NULL)) AS coreg"); $ c-> addSelectColumn (SomePeer :: JOIN_XYZ); – DmitryK

+0

Dernier coup - essayez de passer à cette syntaxe: $ c-> addAsColumn ("registrations", "COUNT (". SomePeer :: ID. ")"); – DmitryK