far*_*ete 4 php mysql yii2 yii2-advanced-app
我对 mysql 的了解非常基础,现在我面临一个“复杂”(对我来说)的查询,我被困在其中,所以如果有人能给我一些启示,请提前感谢您。
我有三张表:
订单
id | name | comments | ...
Run Code Online (Sandbox Code Playgroud)
订单行
id | name | sDate | eDate | comments | ...
Run Code Online (Sandbox Code Playgroud)
订单行统计信息
id | lineID | date | status | ...
Run Code Online (Sandbox Code Playgroud)
每天 OrderLinesStats 都会通过 cron 作业更新,并获取包含实际日期、状态和其他字段的新记录,因此最高 id 是实际数据。
我试图在 yii2 中获取最后一个 stats 行,如下所示:
在 OrdersLines 模型中:
public function getLastOrdersLinesStats()
{
return $this->hasMany(OrdersLinesStats::className(), ['lineID' => 'id'])
->orderBy(['id'=>SORT_DESC])
->groupBy('lineID');
}
Run Code Online (Sandbox Code Playgroud)
订单型号:
public function getOrdersLines()
{
return $this
->hasMany(OrdersLines::className(), ['orderID' => 'id'])
->orderBy(['typeID' => SORT_ASC, 'name' => SORT_ASC])
->with(['lastOrdersLinesStats']);
}
Run Code Online (Sandbox Code Playgroud)
但是当我调试查询时,它看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
并且没有给我每一行的最后一个统计记录......事实上,它给了我最旧的一个。似乎我遗漏了一些东西,但我找不到它。
再次感谢
您需要做的就是将 更改getLastOrdersLinesStats()为如下:
public function getLastOrdersLinesStats()
{
return $this->hasMany(OrdersLinesStats::className(), ['lineID' => 'id'])
->orderBy(['id'=>SORT_DESC])
->one();
}
Run Code Online (Sandbox Code Playgroud)
这基本上返回每个订单所需的最后一个 OrderLinesStats 行
您可以按如下方式访问它:
例如,如果您有一个名为的对象myOrder,那么您可以访问所需的行myOrder->lastOrderLinesStats
| 归档时间: |
|
| 查看次数: |
3888 次 |
| 最近记录: |