0

この場合、ZEND を使用して mySQL ステートメントを適切に記述する方法を知りたいです。

SELECT * FROM `users` WHERE role_id = 2 AND status = 2 AND bddate BETWEEN '1988-05-07' AND '1991-01-01' ORDER BY lastname DESC

たとえば、ifステートメントがあります。フィルター ユーザーが role_id を選択した場合、それを WHERE などに含めます。残りの部分も同様です。

これまでのところ、1 つの WHERE 条件があり、次のように実行しました (今はもっと複雑な条件が必要です)。

    $select = $this->select()
            ->setIntegrityCheck(false)
            ->from(array('u'=>'users'))
            ->join(array('r'=>'user_roles'), 'u.role_id = r.role_id', array('role'=>'title'));          
    if(count($filters) > 0) {
        foreach($filters as $field => $filter) {
            $select->where($field . ' = ?', $filter);
        }
    }

    if(null != $sortField) {

        $select->order($sortField);

    }
4

1 に答える 1

3

さて、あなたはBETWEENに問題を抱えています。これには 2 つの解決策があります。

a) 2 つの where 句を使用して BETWEEN を分割すると、次のようになります。

$select = $this->select()
//... other conditions
    ->where('bddate >= ?', '1988-05-07')
    ->where('bddate <= ?', '1991-01-01');

また

b)

$select = $this->select()
//... other conditions
    ->where ('bddate BETWEEN '1988-05-07' AND '1991-01-01');

値を適切にエスケープするため、オプション a) をお勧めします。

于 2013-01-16T10:22:25.330 に答える