Php 第2条自联接
我想生成一个复杂的自连接查询抛出DQL 下面是我的表结构的一个简单版本Php 第2条自联接,php,doctrine,doctrine-orm,Php,Doctrine,Doctrine Orm,我想生成一个复杂的自连接查询抛出DQL 下面是我的表结构的一个简单版本 CREATE TABLE `item_view` ( `id` int(11) NOT NULL AUTO_INCREMENT, `id_item` int(11) NOT NULL, `id_user` int(11) DEFAULT NULL, PRIMARY KEY (`id`), ) 而实体将是 /** * @Column(name="id", type="integer", n
CREATE TABLE `item_view` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_item` int(11) NOT NULL,
`id_user` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
)
而实体将是
/**
* @Column(name="id", type="integer", nullable=false)
* @Id
* @GeneratedValue(strategy="IDENTITY")
*/
private $id;
/**
* @ManyToOne(targetEntity="User")
* @JoinColumns({
* @JoinColumn(name="id_user", referencedColumnName="id_user")
* })
*/
private $user;
/**
* @ManyToOne(targetEntity="Item")
* @JoinColumns({
* @JoinColumn(name="id_item", referencedColumnName="id_item")
* })
*/
private $item;
我非常想生成这样的查询:(
通过本机查询,我可以选择公共用户信息
你知道我们怎么做吗
更新
我只是找到了一份工作,建立了一种桥梁关系
SELECT v,COUNT(v.user) AS USR_CNT FROM ItemView v JOIN v.user u JOIN u.views v2
WHERE v2.item IN (:items) and v NOT IN (:items)
GROUP BY v.item
ORDER BY USR_CNT DESC
它将生成此SQL
SELECT
`i0_`.`id` AS `id0`,
COUNT(`i0_`.`id_user`) AS `sclr2`,
`i0_`.`id_user` AS `id_user3`,
`i0_`.`id_item` AS `id_item4`
FROM
`item_view` `i0_`
INNER JOIN
`user` `u1_` ON `i0_`.`id_user` = `u1_`.`id_user`
INNER JOIN
`item_view` `i2_` ON `u1_`.`id_user` = `i2_`.`id_user`
WHERE
`i2_`.`id_item` IN (6) AND `i0_`.`id` NOT IN (6)
GROUP BY `i0_`.`id_item`
ORDER BY `sclr2` DESC
那么,我们如何消除与用户表的额外连接呢
SELECT
`i0_`.`id` AS `id0`,
COUNT(`i0_`.`id_user`) AS `sclr2`,
`i0_`.`id_user` AS `id_user3`,
`i0_`.`id_item` AS `id_item4`
FROM
`item_view` `i0_`
INNER JOIN
`user` `u1_` ON `i0_`.`id_user` = `u1_`.`id_user`
INNER JOIN
`item_view` `i2_` ON `u1_`.`id_user` = `i2_`.`id_user`
WHERE
`i2_`.`id_item` IN (6) AND `i0_`.`id` NOT IN (6)
GROUP BY `i0_`.`id_item`
ORDER BY `sclr2` DESC