2016-09-12 87 views
0

我有這樣的SQL查詢其在phpMyAdmin正常工作:學說:GROUP_CONCAT的CASE語法是什麼?

SELECT `Tag_Type_Code`, `Tag_Type`, 
    GROUP_CONCAT(`Tag_Code` ORDER BY `Tag_Name`) as tagCode, 
    GROUP_CONCAT(`Tag_Name` ORDER BY `Tag_Name`) as tagName, 
    GROUP_CONCAT(CASE WHEN isnull(`Tag_Picto`) THEN 'NULL' ELSE `Tag_Picto` END ORDER BY `Tag_Name`) as tagPicto 
FROM tags 
WHERE `modele_code` = "MYCODE" 
GROUP BY `Tag_Type_Code` 
ORDER BY `tag_Type` ASC 

而且我想這樣做在教義和Symfony3,我試過,但我有情況下,當附近有語法錯誤。

$this->getEntityManager()->createQuery(
    'SELECT tag.typeCode, tag.type, 
     GROUP_CONCAT(tag.code ORDER BY tag.name) as tagCode, 
     GROUP_CONCAT(tag.name ORDER BY tag.name) as tagName, 
     GROUP_CONCAT(CASE WHEN tag.picto IS NULL THEN "NULL" ELSE tag.picto END ORDER BY tag.name) as tagPicto 
    FROM AppBundle:Tag tag 
    WHERE tag.modelCode = :code 
    GROUP BY tag.typeCode 
    ORDER BY tag.type ASC' 
)->setParameter('code', $modelCode) 
->getResult(); 

或者這樣:

'SELECT tag.typeCode, tag.type, 
    CASE WHEN tag.picto IS NULL THEN "NULL" ELSE tag.picto END as picto 
    GROUP_CONCAT(tag.code ORDER BY tag.name) as tagCode, 
    GROUP_CONCAT(tag.name ORDER BY tag.name) as tagName, 
    GROUP_CONCAT(picto ORDER BY tag.name) as tagPicto 
FROM AppBundle:Tag tag 
WHERE tag.modelCode = :code 
GROUP BY tag.typeCode 
ORDER BY tag.type ASC' 

我還試圖用IfElse和IFNULL擴展從beberlei/DoctrineExtensions bundle,但我無法找到正確的語法。

此查詢在CASE WHEN時無效。

感謝您的幫助。

回答

0

我覺得你的問題是用雙引號在"NULL",使用單引號和逃避他們:

$this->getEntityManager()->createQuery(
    'SELECT tag.typeCode, tag.type, 
     GROUP_CONCAT(tag.code ORDER BY tag.name) as tagCode, 
     GROUP_CONCAT(tag.name ORDER BY tag.name) as tagName, 
     GROUP_CONCAT(CASE WHEN tag.picto IS NULL THEN \'NULL\' ELSE tag.picto END ORDER BY tag.name) as tagPicto 
    FROM AppBundle:Tag tag 
    WHERE tag.modelCode = :code 
    GROUP BY tag.typeCode 
    ORDER BY tag.type ASC' 
)->setParameter('code', $modelCode) 
->getResult(); 
+0

我不能再使用NULL測試,因爲我改變我的表我的價值觀。顯然,一個GROUP_CONCAT和一個CASE當它們在同一個查詢中不起作用時,我在這裏發佈了這個問題:https://github.com/beberlei/DoctrineExtensions/issues/222 – Felurian

+0

但是,我應該使用setParameter()在我的查詢中設置NULL值:'CASE WHEN tag.picto =:search THEN:replace ELSE tag.picto END' [...]' - > setParameters(array('search'=> NULL,'replace'=> 'NULL'));' – Felurian