如何将CONCAT_WS与IN一起使用?

时间:2013-02-18 21:08:45

标签: php mysql symfony doctrine-orm

使用Symfony2和Doctrine2,想要将CONCAT_WS与IN结合起来,而不是编写大量的IF。

WHERE CONCAT_WS('-', id2, id2) IN ($ids)

我收到此错误:

[Syntax Error] line 0, col 446: Error: Expected Doctrine\\ORM\\Query\\Lexer::T_IN, got '('

$ ids的形式为'123-456'。

如果我只使用一列而不是CONCAT_WS,它可以工作:

WHERE id2 IN ($ids)

2 个答案:

答案 0 :(得分:3)

并非所有MySQL功能都可用于Doctrine。只有那些支持的所有数据库通用的函数都可用。

请点击此链接查看默认情况下可用的功能列表http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html#functions-operators-aggregates

如果您还想使用CONCAT_WS,请阅读以下链接创建自定义功能的信息。您可以创建自己的DQL自定义函数,并且可以像以前一样使用它。

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/dql-user-defined-functions.html

http://symfony.com/doc/current/cookbook/doctrine/custom_dql_functions.html

答案 1 :(得分:0)

我遇到了同样的问题,我用这个解决了它:

CONCAT(CONCAT('-', id2), id2)

不是最优雅的解决方案,但它有效。编写自定义函数是可行的方法。