我实际上想要编写一个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