gpt4 book ai didi

sql - 如何在Yii Framework 2 ActiveRecord的join函数中使用子查询?

转载 作者:行者123 更新时间:2023-12-03 23:23:27 25 4
gpt4 key购买 nike

以下是我的纯SQL查询。

SELECT  a.*, b.*
FROM a
INNER JOIN b
ON a.id = b.a_id
INNER JOIN (
SELECT a_id, MAX(add_time) AS max_add_time
FROM b
GROUP BY a_id
) m
ON b.a_id = m.a_id AND b.add_time = m.max_add_time
ORDER BY b.add_time DESC

我在第二个 INNER JOIN中有子查询。在我的事件查询下面。
$subQuery = B::find()->select(['a_id', 'MAX(add_time) AS max_add_time'])->groupBy('a_id');

$query = A::find()->innerJoin('b', 'a.id = b.a_id')
->innerJoin('(' .
$subQuery->prepare(Yii::$app->db->queryBuilder)
->createCommand()
->rawSql
. ') m', 'b.a_id = m.a_id AND a.add_time = m.max_add_time ')
->orderBy('b.add_time DESC');

它工作正常,但我不喜欢在第二个 INNER JOIN中使用子查询的方式。我要用此查询处理的方法是选择左表与右表的内部联接,按 a_id分组,并按右表的add_time(DESC)排序。我应该如何在第二个INNER JOIN中更好地使用子查询?

最佳答案

以下代码段未经测试,但应该是这样的。如果您阅读文档(位于http://www.yiiframework.com/doc-2.0/yii-db-query.html#innerJoin()-detail),则可以看到带有子查询的数组也是有效的输入,键为别名。

$subQuery = B::find()
->select(['a_id', 'MAX(add_time) AS max_add_time'])
->groupBy('a_id');

$query = A::find()
->innerJoin('b', 'a.id = b.a_id')
->innerJoin(['m' => $subQuery], 'b.a_id = m.a_id AND a.add_time = m.max_add_time')
->orderBy('b.add_time DESC');

关于sql - 如何在Yii Framework 2 ActiveRecord的join函数中使用子查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41279880/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com