typo3 - TYPO3:如何将 SQL 语句转换为 Typo3 PDO
问题描述
当我尝试在TYPO3使用“queryBuilder”实现时,我遇到了 SQL(subqueries) 语句的问题。请你帮我解决这个问题(将 SQL 语句转换为TYPO3 “queryBuilder”)。谢谢!
SQL 语句:
SELECT * FROM table_1 AS t1
INNER JOIN table_2 AS t2 ON t1.id = t2.id
WHERE t2.date = (SELECT MAX(date) FROM t2 AS t2_Tmp WHERE t2_Tmp.id = t2.id)
我尝试使用此代码(示例):
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)
->getQueryBuilderForTable('table2');
return $queryBuilder->select('*')
->from('table2')
->innerJoin(
'table2',
'table1',
't1',
$queryBuilder->expr()->eq('t1.id', $queryBuilder->quoteIdentifier('t2.id'))
)
->where(
$queryBuilder->expr()->eq('t2.date',
$queryBuilder->addSelectLiteral($queryBuilder->expr()->max('t2.date', 'date'))
->from('t2','t2_tmp')
->where($queryBuilder->expr()->eq('t2_tmp.id', $queryBuilder->quoteIdentifier('t2.id')))
)
)
->execute()
->fetchAll();
解决方案
我为这种情况找到了解决方案并为我工作。
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('table1');
$subQueryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('table2');
$queryBuilder->select('*')
->from('table1', 't1')
->innerJoin(
't1',
'table2',
't2',
$queryBuilder->expr()->eq('t2.t1_uid', $queryBuilder->quoteIdentifier('t1.uid')))
->where(
$queryBuilder->expr()->eq('t2.date', '(' . $subQueryBuilder->addSelectLiteral(
"MAX(date) FROM t2 AS t2_tmp WHERE t2_tmp.t1_uid = t2.t1_uid"
) . ')'
)
)
->execute()
->fetchAll();
推荐阅读
- java - 在 Java 中对具有一些要求的字符串数组进行排序
- python - AssertionError: will build wheel with unsupported tag ('cp310', 'cp310', 'linux_x86_64')
- javascript - 开始嵌入 Dailymotion 视频时暂停滑块
- php - 如何在 PHP 中将小浮点数与未知的小数位数相乘而不会因为科学记数法而变为零?
- java - Java 正则表达式匹配模式组意外匹配
- javascript - 正则表达式范围与十进制 0.1 到 1
- laravel - Laravel 验证请求来自
- python - Input() 未能为名称赋值
- sql - 这里有没有在 SQL 查询中使用交叉连接的替代方法?
- python - 如何更改 tkinter 滚动条颜色