【问题标题】:IF statement in Propel select criteriaPropel 选择条件中的 IF 语句
【发布时间】:2010-09-03 13:57:05
【问题描述】:

我正在尝试将 IF 语句合并到我的推进标准中。 这就是我建立标准的方式:

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

基本上,如您所见,查询的 FROM 部分都是错误的。我猜 propel 将 COUNT 中的 IF 语句的一部分误认为是表名,并将它们包含在查询的 FROM 部分中。 有没有人知道我可以如何解决这个问题,或者有人甚至能够得到一些工作?

感谢您的帮助,

文森特

【问题讨论】:

    标签: php sql mysql symfony1 propel


    【解决方案1】:

    似乎问题出在名称 JOIN 上。您是否使用“加入”作为字段名称???在那里尝试不同的名称。

    【讨论】:

    • Sorry field name is JOIN_XYZ 去掉后半部分以缩短代码而不考虑保留名称。
    • 不确定但试试这个: $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);
    • 最后一枪 - 尝试切换到此语法:$c->addAsColumn("registrations", "COUNT(".SomePeer::ID.")");
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-04
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多