Php 第2条自联接

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

我想生成一个复杂的自连接查询抛出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", 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