作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个名为“商店”的表,我想将此商店条目分为 5 个。我的表中有 80k 个条目,我希望用户 A 可以访问 16k 个第一个商店,用户 B 可以访问接下来的 16k 个商店,等等等等。我知道我可以使用 limit,但是 Shop 的主键/id 不是连续的。
目前我的查询如下所示:
if (in_array("ADMIN1", $userRoles)) {
$lowerLimit = 0;
$upperLimit = $numberOfProspectiveShops/5;
} else if (in_array("ADMIN2", $userRoles)) {
$lowerLimit = $numberOfProspectiveShops/5;
$upperLimit = ($numberOfProspectiveShops/5) * 2;
} else if (in_array("ADMIN3", $userRoles)) {
$lowerLimit = ($numberOfProspectiveShops/5) * 2;
$upperLimit = ($numberOfProspectiveShops/5) * 3;
} else if (in_array("ADMIN4", $userRoles)) {
$lowerLimit = ($numberOfProspectiveShops/5) * 3;
$upperLimit = ($numberOfProspectiveShops/5) * 4;
} else if (in_array("ADMIN5", $userRoles)) {
$lowerLimit = ($numberOfProspectiveShops/5) * 4;
$upperLimit = $numberOfProspectiveShops;
}
$prospectiveShopsQuery = $em->createQueryBuilder()->select('s')
->from("AppMainBundle:ProspectiveShop", 's')
->andWhere('s.id <= :upperLimit')
->setParameter('upperLimit', $upperLimit)
->andWhere('s.id > :lowerLimit')
->setParameter('lowerLimit', $lowerLimit)
->andWhere('s.status IS NULL')
;
最佳答案
您应该使用 mySQL 的“限制”功能,而不是基于 id 的 where 子句。
这可以通过使用 setFirstResult($offset) 和 setMaxResults($limit) 来实现。对于前 5000 个,偏移量应等于 0,限制为 5000,对于下一个 5000,偏移量=5000,限制为 5000
您的查询构建器应如下所示:
$prospectiveShopsQuery = $em->createQueryBuilder()->select('s')
->from("AppMainBundle:ProspectiveShop", 's')
->andWhere('s.status IS NULL')
->setFirstResult($offset)
->setMaxResults($limit)
;
关于mysql - 如何将数据库中的条目均分为 5 个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23801079/
我是一名优秀的程序员,十分优秀!