我對mysql的知識是非常基本的,現在我正面臨着一個「複雜」(對我來說)查詢,其中我卡住了,所以如果有人可以給我一些提示, 。Yii2:從hasMany關係中選擇最後一條記錄
我有三個表:
訂單
id | name | comments | ...
OrderLines
id | name | sDate | eDate | comments | ...
OrderLinesStats
id | lineID | date | status | ...
OrderLinesStats每天都通過cron作業進行更新,並獲取具有實際日期,狀態和其他字段的新記錄,因此最高的id是實際數據。
林試圖讓去年的統計,在yii2關係一行如下:
在OrdersLines模型:
public function getLastOrdersLinesStats()
{
return $this->hasMany(OrdersLinesStats::className(), ['lineID' => 'id'])
->orderBy(['id'=>SORT_DESC])
->groupBy('lineID');
}
OrdersModel:
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
並沒有給我每條線的最後統計記錄......事實上,它給了我最古老的一個。似乎我錯過了一些東西,但我無法找到它。
再次感謝
謝謝你,但與相同的查詢此結束。似乎我必須做一個子查詢,因爲這個直接運行到db:SELECT * FROM(SELECT * FROM'ordersLinesStats' 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