TYPO3 DatabaseQueryProcessor:相同 UID 的多个输出
TYPO3 DatabaseQueryProcessor: Multiple Outputs of same UIDs
我正在尝试使用 DatabaseQueryProcessor 获取某些类别(在 pid 1 上),它几乎完美地工作,但某些类别在变量的输出中多次显示。
(我使用的是无头 typo3 10:https://github.com/TYPO3-Initiatives/headless)
brandcategories = JSON
brandcategories {
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
10 {
as = brandcategories
selectFields = sys_category.uid,sys_category.title
table = sys_category
pidInList = 1
where = parent=13
where.insertData = 1
join = sys_category_record_mm on sys_category_record_mm.uid_local =
sys_category.uid
}
}
}
这给了我以下输出:
[
{ "data": { "uid": 14, "title": "Barlow Tyrie", "pid": 1, "t3ver_state": 0 } },
{ "data": { "uid": 14, "title": "Barlow Tyrie", "pid": 1, "t3ver_state": 0 } },
{ "data": { "uid": 16, "title": "Dedon", "pid": 1, "t3ver_state": 0 } },
{ "data": { "uid": 17, "title": "Manutti", "pid": 1, "t3ver_state": 0 } },
{ "data": { "uid": 17, "title": "Manutti", "pid": 1, "t3ver_state": 0 } },
{ "data": { "uid": 19, "title": "Extremis", "pid": 1, "t3ver_state": 0 } }
]
如你所见,uid 14 显示了两次,还有 Manutti。
如果有人能告诉我如何过滤它,那就太好了,所以我只获得每个 ID 一次。谢谢!
一般来说,您可以使用两个不同的选项来限制这样的查询结果:
通过使用 mysql-表达式 DISTINCT
,我没有经验,但如果它可以在 TypoScript 中使用,例如 selectFields = DISTINCT sys_category.uid,sys_category.title
.
在 this page 上写着
There is no support for DISTINCT, a ->groupBy() has to be used instead.
我不确定这是否也适用于您的 TypoScript 问题。
通过在 TypoScript 中使用 groupBy
对结果进行分组:
groupBy = sys_category.uid
可以找到关于这两种方法的一般解释 here,该解释仅与 MySQL 有关,与 TypoScript 无关。
此外,您可以为连接添加更多约束,这样就不需要上述选项了。
我正在尝试使用 DatabaseQueryProcessor 获取某些类别(在 pid 1 上),它几乎完美地工作,但某些类别在变量的输出中多次显示。
(我使用的是无头 typo3 10:https://github.com/TYPO3-Initiatives/headless)
brandcategories = JSON
brandcategories {
dataProcessing {
10 = TYPO3\CMS\Frontend\DataProcessing\DatabaseQueryProcessor
10 {
as = brandcategories
selectFields = sys_category.uid,sys_category.title
table = sys_category
pidInList = 1
where = parent=13
where.insertData = 1
join = sys_category_record_mm on sys_category_record_mm.uid_local =
sys_category.uid
}
}
}
这给了我以下输出:
[
{ "data": { "uid": 14, "title": "Barlow Tyrie", "pid": 1, "t3ver_state": 0 } },
{ "data": { "uid": 14, "title": "Barlow Tyrie", "pid": 1, "t3ver_state": 0 } },
{ "data": { "uid": 16, "title": "Dedon", "pid": 1, "t3ver_state": 0 } },
{ "data": { "uid": 17, "title": "Manutti", "pid": 1, "t3ver_state": 0 } },
{ "data": { "uid": 17, "title": "Manutti", "pid": 1, "t3ver_state": 0 } },
{ "data": { "uid": 19, "title": "Extremis", "pid": 1, "t3ver_state": 0 } }
]
如你所见,uid 14 显示了两次,还有 Manutti。 如果有人能告诉我如何过滤它,那就太好了,所以我只获得每个 ID 一次。谢谢!
一般来说,您可以使用两个不同的选项来限制这样的查询结果:
通过使用 mysql-表达式
DISTINCT
,我没有经验,但如果它可以在 TypoScript 中使用,例如selectFields = DISTINCT sys_category.uid,sys_category.title
.
在 this page 上写着There is no support for DISTINCT, a ->groupBy() has to be used instead.
我不确定这是否也适用于您的 TypoScript 问题。
通过在 TypoScript 中使用
groupBy
对结果进行分组:
groupBy = sys_category.uid
可以找到关于这两种方法的一般解释 here,该解释仅与 MySQL 有关,与 TypoScript 无关。
此外,您可以为连接添加更多约束,这样就不需要上述选项了。