IF语句中的Propel选择标准
问题描述:
我正在尝试将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部分。 有没有人有任何想法,我可以得到'围绕这个问题,或有人甚至能够得到的东西上班?
感谢您的帮助,
文森特
答
好像问题出在名字JOIN。你是否使用“加入”作为字段名?尝试一个不同的名字。
对不起,字段名称是JOIN_XYZ删除了后面的部分来缩短代码而不考虑保留名称。 – luxerama 2010-09-03 14:21:47
不确定,但试试这个: $ c-> addSelectColumn(“COUNT(”。SomePeer :: ID。“)AS registrations”); $ c-> addSelectColumn(SomePeer :: ID); $ c-> addSelectColumn(“COUNT(IF(”。SomePeer :: JOIN_XYZ。“> 0 AND”。SomePeer :: JOIN_XYZ。“ addSelectColumn(SomePeer :: JOIN_XYZ); – DmitryK 2010-09-03 15:19:58
最后一次拍摄 - 尝试切换到此语法: $ c-> addAsColumn(“registrations”,“COUNT(”。SomePeer :: ID。“)”); – DmitryK 2010-09-03 15:26:55