这是我的 Symfony2 项目的 2 个表:
+-----------+ +----------------------------+
| EVENT | | PHOTO |
+-----------+ +------+-----------+---------+
| id | | id | event_id | likes |
+-----------+ +------+-----------+---------+
| 1 | | 1 | 1 | 90 |
| 2 | | 2 | 1 | 50 |
+-----------+ | 3 | 2 | 20 |
| 4 | 2 | 10 |
+------+-----------+---------+
我想选择照片最受欢迎的 2 个活动,如下所示:
+------------+------------+---------+
| event_id | photo_id | likes |
+------------+------------+---------+
| 1 | 1 | 90 |
+------------+----------------------+
| 2 | 3 | 20 |
+------------+----------------------+
SQL解决方案解释如下(SQL 仅选择列上具有最大值的行 https://stackoverflow.com/questions/7745609/sql-select-only-rows-with-max-value-on-a-column)并且可以是:
SELECT p.event_id, p.likes, p.id
FROM photo p
INNER JOIN(
SELECT event_id, max(likes) likes
FROM photo
GROUP BY event_id
) ss on p.event_id = ss.event_id and p.likes = ss.likes
对此的 DQL 查询是什么?我尝试了很多事情但总是出错。
我没有设法使用 DQL 找到合适的答案,但有一种方法,通过理论,使用他们所谓的 Native Query 来处理 SQL 查询。
我设法使用 Native Query 模块和 Symfony 2 创建了 SQL 示例的工作示例
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\Query\ResultSetMapping;
class PhotoRepository extends EntityRepository
{
public function findSomeByEvent()
{
$rsm = new ResultSetMapping;
$rsm->addEntityResult('theNameOfYourBundle:Photo', 'p');
$rsm->addFieldResult('p', 'id', 'id');
$rsm->addFieldResult('p', 'likes', 'likes');
$rsm->addFieldResult('p', 'event', 'event');
$sql = 'SELECT p.event_id, p.likes, p.id
FROM Photo p
INNER JOIN(
SELECT event_id, max(likes) likes
FROM Photo
GROUP BY event_id
) ss on p.event_id = ss.event_id and p.likes = ss.likes';
$query = $this->_em->createNativeQuery($sql, $rsm);
$resultats = $query->getArrayResult();
return $resultats;
}
}
这是文档的链接:原生查询 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/native-sql.html,如果答案没有按预期工作
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)