首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >主义与MAX()

主义与MAX()
EN

Stack Overflow用户
提问于 2014-10-16 23:37:40
回答 1查看 2.9K关注 0票数 0

我有实体

代码语言:javascript
运行
AI代码解释
复制
Template {

   /**
     * @ORM\OneToMany(targetEntity="TemplateSnapshot",  mappedBy="template", cascade={"all"})
     */
    protected $snapshots;

}


/**
 * @ORM\Entity
 */
class TemplateSnapshot {

    /**
     * @ORM\Column(type="datetime")
     * @var \DateTime
     */
    protected $modTime;

}

并尝试获取由modTime在TemplateSnapshot中排序的模板

代码语言:javascript
运行
AI代码解释
复制
QueryBuilder $query
                    ->leftJoin('EditorBundle:TemplateSnapshot','s','WITH', $tableAlias.'.id = s.template_id')
                    ->groupBy($tableAlias.'.id')
                    ->orderBy('s.modTime','desc')
            ;

我得到了

选择t0_.id作为id0,t0_.location作为location1,t0_.name作为name2,t1_.modTime作为modTime3从模板t0_左加入TemplateSnapshot t1_ ON t0_.id = t1_.template_id左加入TemplateSnapshot t2_ ON (t0_.id = t2_.template_id),t2_喜欢哪种?按t0_.id顺序分组由t2_.modTime DESC限制20

此返回第一个联接行。(第一组,然后排序)。我想加入最新的TemplateSnapshot

其他尝试

代码语言:javascript
运行
AI代码解释
复制
$query

                ->leftJoin('TemplateEditorBundle:TemplateSnapshot',
                    's',
                    'WITH',
                    $tableAlias.'.id = s.template_id and s.modTime = MAX(s.modTime)'
                )
                ->groupBy($tableAlias.'.id')
                ->orderBy('s.modTime','desc')
            ;

我得到了这个:

选择t0_.id作为id0,t0_.location作为location1,t0_.name作为name2,t1_.modTime作为modTime3,MAX( t2_.modTime )作为sclr4从模板t0_左加入TemplateSnapshot t1_ ON t0_.id = t1_.template_id左连接TemplateSnapshot t2_ ON (t1_.template_id=t2_和=MAX()),其中喜欢?由t2_.modTime DESC限价20订购

和错误

组函数的enter code here无效使用

其他想法

我尝试直接查询TemplateSnapshot

代码语言:javascript
运行
AI代码解释
复制
$source = new Entity('TemplateEditorBundle:TemplateSnapshot');

 $query
                   ->orderBy($tableAlias.'.modTime','desc') ->groupBy($tableAlias.'.template_id')
            ;

但是,它首先抢购,然后订购,所以不要得到最新的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-17 01:40:33

为此,您需要实现本机查询。查询应该如下所示:

代码语言:javascript
运行
AI代码解释
复制
SELECT * FROM TemplateSnapshot ts
INNER JOIN
(SELECT MAX(mod_time) AS mod_time, template_id FROM TemplateSnapshot GROUP BY template_id) AS ts_max
ON ts.template_id = ts_max.template_id AND ts.mod_time = ts_max.mod_time

此查询将仅为每个mod_timeTemplateSnapshot返回最大值为Template的行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26420170

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文