Doctrine2 / SQL同谋查询

时间:2013-12-22 12:44:25

标签: sql symfony doctrine-orm

我实际上想要编写一个Doctrine查询(使用查询构建器),但首先我想要SQL查询。查询应检索国家/地区之间的同时发生。换句话说,我想知道 X国与Y国合作的次数。仅供参考,合作是指来自不同国家的两位(或更多)发明人属于同一专利

这是我的架构:

国家/地区类:

namespace Db\CreatorBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Db\CreatorBundle\Entity\Inventor;

/**
 * Country
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Country
{
    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255)
     */
    private $name;

    /**
     * @var string
     * @ORM\Id
     * @ORM\Column(name="code", type="string", length=5)
     */
    private $code;

    /**
     * @ORM\OneToMany(targetEntity="Inventor", mappedBy="country")
     */
    private $inventors;
}

专利类:

namespace Db\CreatorBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Db\CreatorBundle\Entity\Country;

/**
 * Inventor
 *
 * @ORM\Table()
 * @ORM\Entity
 * @ORM\Entity(repositoryClass="Db\CreatorBundle\Entity\InventorRepository")
 */
class Inventor
{

    /**
     * @var string
     * @ORM\Id
     * @ORM\Column(name="fullName", type="string", length=255)
     */
    private $fullName;

    /**
    * @ORM\ManyToMany(targetEntity="Patent", mappedBy="inventors")
    */
    private $patents;

    /**
     * @ORM\ManyToOne(targetEntity="Country", inversedBy="inventors")
     * @ORM\JoinColumn(name="country_code", referencedColumnName="code")
     */
    private $country;

}

我已经编写了检索发明人之间共同现象的查询,现在我需要国家的那个。

所以结果应该是这样的:

Country | Country   | Number of cooccurrences
US      | FR        | 30
US      | KR        | 12
US      | JP        | 91
CA      | AU        | 40
FR      | AU        | 23
FR      | NL        | 5

哦,谢谢你!

编辑#1

这是我的第一个问题:

SELECT a.inventor_id, b.inventor_id, count(*) cnt
FROM inventors_patents a INNER JOIN inventors_patents b ON b.patent_id = a.patent_id
AND b.inventor_id > a.inventor_id 
GROUP BY a.inventor_id, b.inventor_id
ORDER BY cnt DESC

结果如下:

AU1 AU2 8
AU1 AU3 7 
AU1 AU4 7
AU2 AU3 6
AU2 AU5 4
AU3 AU6 3

0 个答案:

没有答案
相关问题