首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将SQL查询转换为TYPO3查询构建器?

将SQL查询转换为TYPO3查询构建器?
EN

Stack Overflow用户
提问于 2020-04-01 15:41:10
回答 1查看 153关注 0票数 0

如何将SQL查询转换为TYPO3查询生成器。

代码语言:javascript
复制
SELECT * FROM tableName ORDER BY (CASE WHEN DATE(dateColumn) < DATE(GETDATE()) THEN 1 ELSE 0
     END) DESC, dateColumn ASC

enter link description here

与我在typo3查询构建器中需要的功能相同。

EN

回答 1

Stack Overflow用户

发布于 2020-04-03 05:53:40

要获取您发布的sql查询,您可以执行以下操作:

代码语言:javascript
复制
// little helper function to debug querybuilder,
// queries with parameter placeholders
function debugQuery(QueryBuilder $builder)
{
    $preparedStatement  = $builder->getSQL();
    $parameters         = $builder->getParameters();
    $stringParams = [];
    foreach ($parameters as $key => $parameter) {
        $stringParams[':' . $key] = $parameter;
    }
    return strtr($preparedStatement, $stringParams);
}

// get querybuilder
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
    ->getConnectionByName('Default')
    ->createQueryBuilder();

// build query
$queryBuilder
    ->select('*')
    ->from('table')
    ->getConcreteQueryBuilder()->orderBy(
        '(CASE WHEN DATE('
          .$queryBuilder->quoteIdentifier('dateColumn')
          .') < DATE(GETDATE()) THEN 1 ELSE 0 END)',
        'DESC'
    )
;
$queryBuilder->addOrderBy('dateColumn', 'ASC');

// build query
$sql = debugQuery($queryBuilder);

将生成以下sql查询:

代码语言:javascript
复制
SELECT 

FROM `table` 
ORDER BY 
  (CASE WHEN DATE(`dateColumn`) < DATE(GETDATE()) THEN 1 ELSE 0 END) DESC, 
  `dateColumn` ASC

据我所知,GETDATE()不是一个有效的mysql方法,更多的是MSSQL。最终,您需要使用CURRENT_DATE()。

编辑#1

未测试/运行..刚刚创建了与您提供的内容相匹配的sql字符串。因此,如果提供的sql查询本身是错误的,请不要责怪我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60965826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档