http://sqlfiddle.com/#!9/b2b34e/7
我正在试图弄清楚如何使用Doctrine2的新语法编写以下内容:
SELECT
id, username, (
6371 * acos (
cos ( radians(53.3646732) )
* cos( radians( latitude ) )
* cos( radians( longitude ) - radians(-6.235036) )
+ sin ( radians(53.3646732) )
* sin( radians( latitude ) )
)
) AS distance
FROM users
HAVING distance < 50
ORDER BY distance
LIMIT 0 , 20;
到目前为止,我已经尝试过这个:
$query = $em->createQuery('
SELECT NEW GU\UserBundle\Model\NearbyUser(u.id,
6371 * acos (
cos ( radians(53.3646732) )
* cos( radians( u.latitude ) )
* cos( radians( u.longitude ) - radians(-6.235036) )
+ sin ( radians(53.3646732) )
* sin( radians( u.latitude ) )
)
)
FROM GU\UserBundle\Entity\User u');
如何将此部件设置为名为distance
的变量而不会抛出错误,以便我可以使用HAVING distance < 50
:
6371 * acos (
cos ( radians(53.3646732) )
* cos( radians( latitude ) )
* cos( radians( longitude ) - radians(-6.235036) )
+ sin ( radians(53.3646732) )
* sin( radians( latitude ) )
)
) AS distance
更新 我不认为我正确地做这一部分:
$query = $em->createQuery('
SELECT NEW GU\UserBundle\Model\NearbyUser(u.id,
(6371 * acos (
cos ( radians(53.3646732) )
* cos( radians( u.latitude ) )
* cos( radians( u.longitude ) - radians(-6.235036) )
+ sin ( radians(53.3646732) )
* sin( radians( u.latitude ) )
)) as distance
)
FROM GU\UserBundle\Entity\User u');
给出错误:
[语法错误]第0行,第367行:错误:预期 Doctrine \ ORM \ Query \ Lexer :: T_FROM,得到')'
答案 0 :(得分:1)
据我所知,您无法使用SELECT NEW
语法执行此操作,而您尝试执行的操作无论如何都是无效的语法,因此您有两个选择:
SELECT NEW
并加载u.id, your formula here AS distance
作为数组,然后根据需要创建实体(并将它们附加到实体管理器)。这将产生更少的行并且将更有效,因为您将需要更少的实体(或者如果您不打算坚持它们,可能不会需要任何实体)