我有这个查询,它返回给定区域中的所有 POI:
$query = $em
->createQuery(
'SELECT f FROM MyApplication\MyBundle\Entity\POI p
WHERE (p.latitude BETWEEN :southEastLatitude AND :norhtWestLatitude) AND
(p.longitude BETWEEN :southEastLongitude AND :norhtWestLongitude)
ORDER BY p.name
');
$query->setParameter(":norhtWestLatitude", $northWestLat);
$query->setParameter(":norhtWestLongitude", $northWestLng);
$query->setParameter(":southEastLatitude", $southEastLat);
$query->setParameter(":southEastLongitude", $southEastLng);
如果我尝试访问一个小区域(参数差异很小),我成功地得到了结果。我想我得到的结果多达 1000 行......我不太确定。
如果我尝试访问更大的区域,我会得到一个空的结果集......
不知何故,使用更大区域的参数触发相同的查询,我得到了正确的结果集(~1060 行)。
所以我想知道学说的局限性(甚至是 Symfony ???我在 Symfony2 项目中使用学说),有吗?我也试过了,$query->setMaxResults(999999999);
但没有帮助...
有人有同样的问题吗?
编辑:也许 php 内存使用率很高?我在 getresult 之前和之后添加了这些行:
echo "Memory usage before: " . (memory_get_usage() / 1024) . " KB" . PHP_EOL;
echo "Memory usage after: " . (memory_get_usage() / 1024) . " KB" . PHP_EOL;
输出是:
之后的内存使用量:5964.0625 KB
之后的内存使用量:10019.421875 KB
编辑: 奇怪的测试:
1)如果我使用这些参数进行测试:
WHERE
(f.latitude BETWEEN 45.64273082966722 AND 47.29965978937995) AND
(f.longitude BETWEEN 4.93262593696295 AND 9.99999999999999)
我得到 923 行(正常行为)
2) 如果我将参数 9.999999999999 更改为 10.000000000(或大于 9.9999999 的某个数字),我的应用程序中将得到一个空的结果集。数据库仍然返回 923 行(对于 10.000000000)。
编辑: 我可以解决这个问题,在这里讨论:https ://groups.google.com/d/msg/doctrine-user/qLSon6m4nM4/y5vLztHcbDgJ