3

我正在转几圈,不太明白 DQL 中的“加入”如何,我想用 MySQL 在 Symfony 项目中加入两个表,我已经做出了我想翻译的决定,但不太明白如何要执行此 JOIN,最让我印象深刻的是我不知道在哪里告诉表我要进行 JOIN,但仅在我看到的示例中只显示了一个表调用。

这是我的代码 MySQL:

SELECT t1.id, AVG(t2.valoracion) 
      FROM video AS t1, valoracion_video AS t2 
        WHERE t1.id=t2.video_id 
        GROUP BY t2.video_id 
        ORDER BY t2.valoracion DESC;

这是实体:)

视频

class Video
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

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

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

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="fecha_publicacion", type="datetime", nullable=false)
     */
    private $fechaPublicacion;

    /**
     * @var \Categoria
     *
     * @ORM\ManyToOne(targetEntity="Categoria", inversedBy="video")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="categoria_id", referencedColumnName="id")
     * })
     */
    private $categoria;

    /**
     * @var \Proveedor
     *
     * @ORM\ManyToOne(targetEntity="\odoc\ProveedorBundle\Entity\Proveedor", inversedBy="video")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="proveedor_id", referencedColumnName="id")
     * })
     */
    private $proveedor;

    /**
     * @ORM\OneToMany(targetEntity="ValoracionVideo", mappedBy="video")
     */
    protected $valoracionvideo;    

价值

class ValoracionVideo
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var integer
     *
     * @ORM\Column(name="valoracion", type="integer", nullable=false)
     */

    private $valoracion;

    /**
     * @var \DateTime
     *
     * @ORM\Column(name="fecha", type="datetime", nullable=false)
     */
    private $fecha;

    /**
     * @var \Video
     *
     * @ORM\ManyToOne(targetEntity="Video", inversedBy="valoracion_video")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="video_id", referencedColumnName="id")
     * })
     */
    private $video; 

    /**
     * Get id
     *
     * @return integer 
     */
4

2 回答 2

1

尝试以下 DQL(不过,我不确定它是否会起作用)。

还要记住首先将 DQL 视为对象,而不是 SQL。这意味着使用实体类和属性名称而不是表和列名称。

SELECT t1.id, AVG(t2.valoracion) valoracion_media
FROM My\Entity\ValoracionVideo t2
JOIN t2.video t1
GROUP BY t1.id
ORDER BY valoracion_media DESC;
于 2013-10-20T23:41:43.653 回答
1

这是结果:)

SELECT v FROM Bundle:Entity v JOIN v.valoracionvideo a WHERE v.id = a.video GROUP BY a.video ORDER BY a.valoracion DESC
于 2013-10-21T10:19:24.997 回答