首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在id上的原则匹配/连接中如何查询多个表

问在id上的原则匹配/连接中如何查询多个表
EN

Stack Overflow用户
提问于 2012-07-11 16:46:40
回答 1查看 8.5K关注 0票数 2

我有两个实体:文章和类别。它有很多表: article_category。

我可以在MySQL中没有任何问题地执行这个查询:

代码语言:javascript
复制
SELECT COUNT(*) cnt, c.id, c.name FROM article_category ac, category c WHERE ac.category_id = c.id GROUP BY c.id ORDER BY cnt DESC

但我很难将其转换为Doctrine2查询。下面返回一个类不存在错误,引用article_category表。

代码语言:javascript
复制
[...]
createQuery("SELECT COUNT(*) cnt, c.id, c.name FROM article_category ac, category c WHERE ac.category_id = c.id GROUP BY c.id ORDER BY cnt DESC")
[...]

具体而言,我的问题是我不知道如何访问多到多表中的"category_id“。

编辑

下面是使用内部连接的相同查询(如果这样做更容易)。

代码语言:javascript
复制
SELECT COUNT(*) cnt, c.id, c.name FROM category c INNER JOIN article_category ac ON c.id = ac.category_id GROUP BY c.id ORDER BY cnt DESC
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-11 17:23:39

我想出了办法。我使用DQL创建查询:

代码语言:javascript
复制
    $qb = $this->getEntityManager()->createQueryBuilder();
    $qb->select('COUNT(c) cnt, c.id, c.name')
    ->from('NatknowEditorBundle:Category', 'c')
    ->innerJoin('c.articles', 'ac')
    ->groupBy('c.id')
    ->orderBy('cnt', 'DESC');

    return $qb->getQuery()->getResult();

我认为我必须指定连接需要发生的位置(“. ON c.id = ac.category_id .”)。但是,由于数组集合(在我的例子中是“文章”)已经映射了“多对多”,所以我想"ON“是隐式的。

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

https://stackoverflow.com/questions/11437472

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档