0

以下のようなお問い合わせがあります。

$tests = DB::select('devices.id')
 ->select(array('devices.description', 'dev_desc'))
 ->select(array('device_types.description', 'devtype_init'))
 ->select(array('actions.description', 'test_desc'))
 ->select(array('history.dt_logged', 'last_test'))
 ->select(array(DB::expr('history.dt_logged + (devices.frequency * 7 * 24 * 60 * 60)'), 'next_test'))
 ->from('history')
 ->join('actions')->on('history.action_id', '=', 'actions.id')
 ->join('devices')->on('history.device_id', '=', 'devices.id')
 ->join('device_types')->on('devices.device_type_id', '=', 'cal_device_types.id')
 ->and_where(DB::expr('history.dt_logged + (devices.frequency * 7 * 24 * 60 * 60)'), '>=', $start)
 ->and_where(DB::expr('history.dt_logged + (devices.frequency * 7 * 24 * 60 * 60)'), '<=', $end)
 ->where('device_types.description', '=', 'Calibration')
 ->order_by('history.dt_logged', 'desc')->limit(1)
 ->execute();

1 つのレコードを引き戻したいので、「 limit(1) 」ですが、複数のレコードを引き戻します。コードは私には完璧に見えます。どんな助けでも大歓迎です。

乾杯。

相関サブクエリは機能しますか?!

4

1 に答える 1

0

正確な理由を得るには、さまざまなテーブル間の関係を確認する必要がありますが、私の推測では、それらのテーブル間で 1 対多の関係があり、GROUP BYそれらを要約するには が必要になるでしょう。

WHEREメイン行を 1 つの結果に制限する句 (devices.id = x など) を使用してクエリを実行することをお勧めします。次に、その ID に対して返された複数の行が表示されます。GROUP BY などの集計関数を使用して、これらの結果を 1 つの行に結合します。

于 2013-08-19T15:40:44.900 に答える