Doctrine FIND_IN_SET leads to Error: Expected end of string, got '('
Doctrine FIND_IN_SET leads to Error: Expected end of string, got '('
我在 Symfony2 中有以下学说查询:
$query = $em
->createQuery("
SELECT m FROM MyBackendBundle:Merchant m
WHERE m.active = :active
ORDER BY FIND_IN_SET(m.range, 'all', 'without_special'), m.tradingAmount DESC
")
->setParameter('active', true)
;
但这会导致以下错误:
[Syntax Error] line 0, col 112: Error: Expected end of string, got '('
和:
QueryException:
SELECT m FROM My\Bundle\BackendBundle\Entity\Merchant m
WHERE m.active = :active
ORDER BY FIND_IN_SET(m.range, 'all', 'without_special') ASC, m.tradingAmount DESC
我用FIND_IN_SET
doctrine extension from beberlei是为了能够在查询中使用它。
知道为什么会这样吗?
更新:
这样使用 SELECT 中的 FIND_IN_SET
作为别名:
SELECT m, FIND_IN_SET(m.range, 'all', 'without_special') AS HIDDEN findInSet
FROM MyBackendBundle:Merchant
WHERE m.active = :active
ORDER BY findInSet, m.productAmount DESC
导致以下错误:
[Syntax Error] line 0, col 56: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ','
感谢@qooplmao 的评论,这是工作版本:
$query = $em
->createQuery("
SELECT m, FIND_IN_SET(m.range, 'all,without_special') AS rangeOrdering
FROM MyBackendBundle:Merchant m
WHERE m.active = :active
ORDER BY rangeOrdering, m.tradingAmount DESC
")
->setParameter('active', true)
;
FIND_IN_SET
只有两个参数并且必须在查询的 SELECT
部分内,因为不能在查询的 ORDER BY
部分中使用函数。
我在 Symfony2 中有以下学说查询:
$query = $em
->createQuery("
SELECT m FROM MyBackendBundle:Merchant m
WHERE m.active = :active
ORDER BY FIND_IN_SET(m.range, 'all', 'without_special'), m.tradingAmount DESC
")
->setParameter('active', true)
;
但这会导致以下错误:
[Syntax Error] line 0, col 112: Error: Expected end of string, got '('
和:
QueryException:
SELECT m FROM My\Bundle\BackendBundle\Entity\Merchant m
WHERE m.active = :active
ORDER BY FIND_IN_SET(m.range, 'all', 'without_special') ASC, m.tradingAmount DESC
我用FIND_IN_SET
doctrine extension from beberlei是为了能够在查询中使用它。
知道为什么会这样吗?
更新:
这样使用 SELECT 中的 FIND_IN_SET
作为别名:
SELECT m, FIND_IN_SET(m.range, 'all', 'without_special') AS HIDDEN findInSet
FROM MyBackendBundle:Merchant
WHERE m.active = :active
ORDER BY findInSet, m.productAmount DESC
导致以下错误:
[Syntax Error] line 0, col 56: Error: Expected Doctrine\ORM\Query\Lexer::T_CLOSE_PARENTHESIS, got ','
感谢@qooplmao 的评论,这是工作版本:
$query = $em
->createQuery("
SELECT m, FIND_IN_SET(m.range, 'all,without_special') AS rangeOrdering
FROM MyBackendBundle:Merchant m
WHERE m.active = :active
ORDER BY rangeOrdering, m.tradingAmount DESC
")
->setParameter('active', true)
;
FIND_IN_SET
只有两个参数并且必须在查询的 SELECT
部分内,因为不能在查询的 ORDER BY
部分中使用函数。