推進基準に 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 部分はすべて間違っています。COUNT の IF ステートメントの一部をテーブル名と間違えて、それらをクエリの FROM 部分に含めたと思います。この問題を回避する方法を知っている人はいますか、それとも誰かが何かを機能させることができましたか?
ご助力いただきありがとうございます、
ヴィンセント