問題描述
我目前在我的 TYPO3 Ext 中有一個很大的條目列表,這導致站點加載時間很短,所以我想按字母順序拆分條目列表.為此,我使用 queryBuilder 僅選擇那些以 a、b、c 等開頭的條目.但是當涉及到數字和特殊字符時,我現在卡住了.我發現了這個:MySQL - 如果它以數字開頭或特殊字符,這正是我所需要的.但我不知道如何在 queryBuilder 中創建 REGEXP.有人可以幫忙嗎?
I currently have a big list of entries in my TYPO3 Ext that causes the Site to have pretty poor loading times, so i want to split up the Entry list alphabetically. For that I'm using the queryBuilder to select only those entries, that start either with an a, b, c and so on. But im stuck now when it comes to numbers and special chars. I found this: MySQL - If It Starts With A Number Or Special Character which is exactly what I need. But I have no clue how to make an REGEXP in the queryBuilder. Can someone help?
TYPO3 版本為 10.4.6
TYPO3 version is 10.4.6
提前致謝
推薦答案
也許這樣的事情適合你:
Maybe something like this works for you:
use TYPO3\CMS\Core\Database\ConnectionPool;
use TYPO3\CMS\Core\Utility\GeneralUtility;
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($tableName);
$result = $queryBuilder->select('*')
->from($tableName)
->where(
$queryBuilder->expr()->comparison(
$queryBuilder->quoteIdentifier($fieldName),
'NOT REGEXP',
$queryBuilder->createNamedParameter('^[[:alpha:]]')
)
)
->execute()
->fetchAll();
這會創建一個這樣的查詢(假設 $tableName = 'foo'
和 $fieldName = 'baz'
):
This creates a query like this (assuming $tableName = 'foo'
and $fieldName = 'baz'
):
SELECT `foo`.*
FROM `foo`
WHERE `foo`.`baz` NOT REGEXP '^[[:alpha:]]'
參考:https://github.com/TYPO3/TYPO3.CMS/blob/10.4/typo3/sysext/core/Classes/Database/Query/Expression/ExpressionBuilder.php#L97-L100
這篇關于如何使用 TYPO3 queryBuilder 發出正則表達式請求的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!