【问题标题】:How to use CASE and SUBSTRING_INDEX in doctrine query?如何在学说查询中使用 CASE 和 SUBSTRING_INDEX?
【发布时间】:2023-03-17 07:30:01
【问题描述】:

我有一个 sql 查询,它在 mysql 服务器中成功运行并得到了输出。

但我无法将此查询转换为教义格式。 查询如下

SELECT (CASE WHEN seqnum < 10 THEN domain ELSE 'Others' END) as domain,
       SUM(c)
FROM (SELECT SUBSTRING_INDEX(SUBSTR(email, INSTR(email, '@') + 1), '.', 1) as domain,
             COUNT(*) as C,
             ROW_NUMBER() OVER (ORDER BY COUNT(*) DESC) as seqnum
      FROM newsletter_recipient
      WHERE LENGTH(email) > 0
      GROUP BY domain
     ) d
GROUP BY (CASE WHEN seqnum < 10 THEN domain ELSE 'Others' END)
ORDER BY SUM(c) DESC;

当我在教义中使用它时,它会给出类似的错误

预期的已知函数,得到 'SUBSTRING_INDEX'

希望有人可以帮助我将此查询转换为教义格式。

【问题讨论】:

    标签: doctrine-orm doctrine doctrine-query


    【解决方案1】:

    您要么需要implement vendor-specific functions,以便 DQL 可以将其转换为适当的 SQL 调用,要么在这种简单的情况下,内置函数调用的组合可能就足够了:

    SUBSTRING(email, LOCATE('@', email) + 1, ...
    

    有关可用跨平台功能的完整列表,see the docs

    此外,我不得不提一下,没有 TLD 的域名可能包含点,例如,您可能会在 info@mail.example.org 中查找 mail.example。不过,这取决于您的规格。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-18
      • 2013-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多