1

我有两个实体,视频和投票。Vote 与 Video 是多对一的关系,但 Video 与 Vote 没有关系。我正在尝试检索按投票计数排序的视频列表。

以下 SQL 可以让我得到我想要的东西:

SELECT video.*, COUNT(video_id) AS vote_count
    FROM video
    LEFT JOIN vote ON vote.video_id = video.id
    GROUP BY video.id
    ORDER BY vote_count DESC;

我正在尝试使用 DQL 实现类似的目标,但到目前为止还没有运气:

SELECT vid.name, COUNT(vote.video_id) as vote_count
    FROM VideoVote\Video\Video vid
    JOIN vote.video vid
    GROUP BY video.id
    ORDER BY vote_count DESC
4

2 回答 2

0

不能这样做,因为......视频与投票无关。所以你的选择是

  1. 使关系双向(我会选择这个)。对数据库没有任何惩罚,PHP 中的额外开销很少。(测试性能,看看它是否适合你)。
  2. 使用您的本机 SQL 查询并使用结果集映射。
于 2013-10-09T20:51:02.827 回答
0

谢谢翻转。一旦我添加了从视频到投票的一对多关联,以下 DQL 将起作用:

SELECT vid, COUNT(vote.id) AS HIDDEN vote_count
    FROM VideoVote\Video\Video vid
    LEFT JOIN vid.votes vote
    GROUP BY vid.id
    ORDER BY vote_count DESC
于 2013-10-10T13:37:28.977 回答