2010-09-03 128 views
0

我正在嘗試將IF語句合併到我的推動標準中。 這是我如何建立我的標準:IF語句中的Propel選擇標準

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

然而檢查結果的SQL我得到以下時:

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'" 

基本上,你可以看到,從查詢的一部分都是錯的。我猜推動錯誤COUNT中的IF語句的一部分作爲表名稱,並將它們包含在查詢的FROM部分。 有沒有人有任何想法,我可以得到'圍繞這個問題,或有人甚至能夠得到的東西上班?

感謝您的幫助,

文森特

回答

0

好像問題出在名字JOIN。你是否使用「加入」作爲字段名?嘗試一個不同的名字。

+0

對不起,字段名稱是JOIN_XYZ刪除了後面的部分來縮短代碼而不考慮保留名稱。 – luxerama 2010-09-03 14:21:47

+0

不確定,但試試這個: $ c-> addSelectColumn(「COUNT(」。SomePeer :: ID。「)AS registrations」); $ c-> addSelectColumn(SomePeer :: ID); $ c-> addSelectColumn(「COUNT(IF(」。SomePeer :: JOIN_XYZ。「> 0 AND」。SomePeer :: JOIN_XYZ。「<3,1,NULL))AS coreg」); $ c-> addSelectColumn(SomePeer :: JOIN_XYZ); – DmitryK 2010-09-03 15:19:58

+0

最後一次拍攝 - 嘗試切換到此語法: $ c-> addAsColumn(「registrations」,「COUNT(」。SomePeer :: ID。「)」); – DmitryK 2010-09-03 15:26:55