1

処理しなければならない小さなタスクがあります。関数を使用して手動で SQL を書き出すこともできますが、これについて学ぶことに本当に興味があります。query()

注:私は(特にフレームワークとして)ZFにかなりグリーンです..私はDBをライブラリとして使用しているだけです。

望ましい結果:
SQLを次のように表示したいのは次のようなものです。

SELECT name, phone, email 
FROM company 
WHERE name = 'Acme Anvil Corp' 
AND ( category1 = 'abc' 
      OR category3 = 'klm'
      OR category8 = 'xyz'
    )


私がこれまでに得た場所:

$select = $db 
            ->select() 
            ->from('company, array('name', 'phone', 'email'))
            ->where('name = ?', 'Acme Anvil Corp')
            ->limit(1);

その後、私は悩まされています。
たくさんの 's jut を追加してorWhere()も、望ましい結果は得られません。集合グループに
たくさんの 's を追加するにはどうすればよいですか?orWhere()()


の方法として、SQL を次のようなものにすることを目指すルートに進むことを考えました。

SELECT c.name, c.phone, c.email 
FROM  (
        SELECT name, phone, email 
        FROM company
        WHERE category1 = 'abc' 
        OR category3 = 'klm'
        OR category8 = 'xyz'
      ) AS c
WHERE c.name = 'Acme Anvil Corp'

(私は SQL の第一人者ではないので、これら 2 つに大きな違いがある場合は、遠慮なくフィードバックをお寄せください :)

繰り返しますが、それにアプローチする方法がわかりません。

4

1 に答える 1

1
use Zend\Db\Sql\Predicate;

$select->where(array(
    // ...
    new Predicate\PredicateSet(
        array(
            new Predicate\Like('content', '%'.$searchstring.'%'),
            new Predicate\Like('title', '%'.$searchstring.'%'),
        ),
        Predicate\PredicateSet::COMBINED_BY_OR
    ),
    // ...
));

また、

$predicate = new  \Zend\Db\Sql\Where();
$sql->where($predicate->greaterThan('filterColumn', '20'));
$sql->where($predicate->greaterThan('filterColumn', '30'), 'OR');
于 2013-03-21T20:47:14.667 に答える