簡體   English   中英

教義FIND_IN_SET導致錯誤:預期的字符串結尾,得到了'('

[英]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 教義擴展名,以便能夠在查詢中使用它。

任何想法為什么會發生這種情況?

更新:

通過以下FIND_IN_SET在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部分中使用函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM