mysql - 如何限制symfony QueryBuilder中左连接表中的第n条记录返回
问题描述
我一直遇到返回左连接投票表限制每个 Answer 50 行记录的问题。答案表与投票表具有一对多的关系。我如何限制每个答案的前 50 行投票?查询生成器是否允许限制左连接表?
$query = $this->getDoctrine()->createQueryBuilder();
$results = $query
->select('a')
->addSelect('v')
->from('answers', 'a')
->leftJoin('votes', 'v')
->orderBy('v.postedTime', 'ASC')
->getQuery()
->getArrayResult();
如果 QueryBuilder 无法实现如何创建原始查询?
$query = $this->getDoctrine()->createQuery(
"SELECT a.*, v.*
FROM answer a
LEFT JOIN a.votes v
ORDER BY v.postedTime ASC
)
解决方案
嗨!试试看,由于我不知道完整的上下文,因此存在不准确之处。如果您发现基本错误,请写
$numberVotes = 50;
$firstNumberVotesQuery = $this->getDoctrine()->createQueryBuilder()
->select('vote.id as vote_id')
->from(Vote::class, 'Vote')
->where('Vote.answer = Answer')
->orderBy('Vote.id', 'ASC')
->setMaxResults($numberVotes)
;
$query = $this->getDoctrine()->createQueryBuilder()
->select('Answer', 'Vote')
->from(Answer::class, 'Answer')
->leftjoin('Answer.votes', 'Vote', 'WITH', $qb->expr()->in('Vote.id', '(' . $firstNumberVotesQuery->getDql() . ')'))
->getQuery()
->getResult()
;
在 SQL 中,我认为应该是这样的
SELECT *
FROM answer
LEFT JOIN vote ON answer.id = vote.answer_id AND vote.id IN (
SELECT id
FROM vote first_50_votes
WHERE first_50_votes.answer_id = answer.id
ORDER BY id
LIMIT 50
)
推荐阅读
- javascript - 如何使用 javascript fetch 更新本地 txt/csv 文件
- react-native - ld:架构 x86_64 的 9 个重复符号 clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
- scala - Akka 流条件 zip
- tensorflow - keras 视网膜网络模型转换器到 tflite
- json - Hal+json 模型映射错误 Unrecognized field "_embedded" Java Spring boot
- javascript - 我如何等待文件上传,以便我可以使用参数上传下一张图片
- android - 如何在 Xamarin 后面的代码中将可绘制文件夹中的图像作为字节数组或位图获取
- r - 如何在ggplot2中调整颜色形状组合的图例?
- rust - Rust trait 是否与 Java 接口相同
- javascript - 如何使用 rechartjs 创建水平滚动图表?