1

ダイナミック SQL を使用して、従業員モデル テーブル クラスから特定の行セットのみを取得したい ATK4 DSQL のヘルプが必要です。

WHERE ステートメントで SQL BETWEEN または IN 句を生成して、これらの構造のように「何とか」見えるようにすることはできますか?

SQL 'IN' :

SELECT id,fnm,lnm,bp FROM emp WHERE id IN (1,3,5,7,9,11);

$model=$this->add('Model_Employee');
$set=array(1,3,5,7,9,11);
$list=$mode->dsql()
   ->field('id')
   ->field('fnm') // first name
   ->field('lnm') // last name
   ->field('bp') // basic pay
   ->where('id in (%l)',$set) // only 1,3,5,7,9 & 11
   ->do_getAll();

SQL 'BETWEEN' :

SELECT id,fnm,lnm,bp FROM emp WHERE bp BETWEEN 3000 AND 5000;

$model=$this->add('Model_Employee');
$min=3000;$max=5000;
$range=$mode->dsql()
   ->field('id')
   ->field('fnm') // first name
   ->field('lnm') // last name
   ->field('bp') // basic pay
   ->where('bp between %i and %i',$min,$max)
   ->do_getAll();

ありがとう!

4

1 に答える 1

1

DSQL の現在のバージョン用に更新: http://git.io/dsql

ドキュメントから:

$query -> where('time', $query->expr(
    'between [] and []',
    [$from, $to]
));

古い答え: 4.1 までの Agile Toolkit では、* "where" は式に非常に限定されています。次のように記述する必要があります。

->where('bp between '.
    $this->api->db->escape($min).' and '.
    $this->api->db->escape($max));
于 2011-12-17T11:38:02.770 に答える