1

tableGateway を使用して、ZF2 で次のタイプのクエリを取得したいと考えています。

SELECT IF(column1 LIKE 'text', 1, 0)
FROM table
WHERE (column1 LIKE 'text' OR column2 LIKE 'text') AND status = 1

これを達成することは可能ですか?私は次のことを試みました:

$this->tableGateway->select(function (Select $select) use ($keyword) {

    $select->columns(array('id', "IF(column1 LIKE '{$keyword}', 1, 0)"), false)
           ->where(array(
                    new Predicate(
                        array(
                             new Like('column1', '%'.$keyword.'%'),
                             new Like('column2', '%'.$keyword.'%')

                         ),
                         Predicate::COMBINED_BY_OR
                    ),
                 'status' => 1
            ));
        });

しかし、これによりエラーが発生しますUnknown column 'IF(column1 LIKE 'test', 1, 0)' in 'field list'。回避策はありますか?

編集

SQL文字列をvar_dumpしたとき、次の結果が得られました。

SELECT `id` AS `id`, `IF(table.column1 LIKE 'test', 1, 0)` AS `IF(table.column1 LIKE 'test', 1, 0)` 
FROM `table`
WHERE (`table`.`column1` LIKE '%test%' OR `table`.`column2` LIKE '%test%') 
      AND `table`.`status` = '1';

したがって、IFを引用符で囲み、列のように扱います。問題は、それを無効にする方法です。

4

1 に答える 1

1

この質問のおかげで、私はそれを理解しました。Expression次のように IF ステートメントを に入れるだけです。

$select->columns(array('id',  new Expression("IF(column1 LIKE '{$keyword}', 1, 0)")), false)
于 2013-09-24T12:35:45.957 に答える