mysqlに関する私の知識は非常に基本的なものであり、今私は「複雑な」クエリに直面しています。 。Yii2:hasMany関係の最後のレコードを選択
受注
id | name | comments | ...
注文ライン
id | name | sDate | eDate | comments | ...
OrderLinesStats
:は、私は3つのテーブルを持っています10
id | lineID | date | status | ...
毎日、OrderLinesStatsはcronジョブを介して更新され、実際の日付、ステータス、およびその他のフィールドを持つ新しいレコードを取得し、最高のIDが実際のデータとなるようにします。
イム次のようにyii2中関係とその最後の統計行を取得しよう:OrdersModel
public function getLastOrdersLinesStats()
{
return $this->hasMany(OrdersLinesStats::className(), ['lineID' => 'id'])
->orderBy(['id'=>SORT_DESC])
->groupBy('lineID');
}
:OrdersLinesモデルに
public function getOrdersLines()
{
return $this
->hasMany(OrdersLines::className(), ['orderID' => 'id'])
->orderBy(['typeID' => SORT_ASC, 'name' => SORT_ASC])
->with(['lastOrdersLinesStats']);
}
しかし、私はこのようなクエリをデバッグします:
SELECT * FROM `ordersLinesStats` WHERE `lineID` IN (1873, 1872, 1884, 1883, 1870, 1874, 1876, 1880, 1871, 1877, 1881, 1882, 1885, 1886, 1869, 1875, 1878) GROUP BY `lineID` ORDER BY `id` DESC
私は各行の最後の統計レコードを取得しません...実際には、それは私に最も古いものを与えます。私は何かを見逃しているようですが、私はそれを見つけることができません。 OrdersModelで
おかげで再び
ありがとうございましたが、これは同じクエリで終わります。 SELECT * FROM(orders * FROM 'ordersLinesStats's where lineID'IN(1957、1954、2035、1956、1955、1958)ORDER BY' ordersLinesStats'は、サブクエリを作る必要があると思われます。 .'id' DESC)AS LastStatsTable GROUP BY 'lineID'; activequeryでこれを行うチャンス?ありがとうございました – farrusete
オリジナルの質問が変更されたので、私は[link](https://stackoverflow.com/questions/45754901/yii2-subquery-within-model-relation)で新しい質問を作成しました – farrusete