TYPO3 DatabaseQueryProcessor:相同 UID 的多个输出
Posted
技术标签:
【中文标题】TYPO3 DatabaseQueryProcessor:相同 UID 的多个输出【英文标题】:TYPO3 DatabaseQueryProcessor: Multiple Outputs of same UIDs 【发布时间】:2021-04-05 08:53:36 【问题描述】:我正在尝试使用 DatabaseQueryProcessor 获取某些类别(在 pid 1 上),它几乎可以完美运行,但某些类别在变量的输出中显示多次。
(我使用的是无头错字3 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 一次。谢谢!
【问题讨论】:
正常情况下,当您对 MM 表使用类似的连接时。 【参考方案1】:一般而言,您可以使用两种不同的选项来限制这样的查询结果:
通过使用 mysql-Expression DISTINCT
,我没有经验,但如果它可以在 TypoScript 中使用,如 selectFields = DISTINCT sys_category.uid,sys_category.title
。this page上写着
不支持 DISTINCT,必须使用 ->groupBy()。
我不确定这是否也适用于您的 TypoScript 问题。
通过在 TypoScript 中将结果与 groupBy
分组:groupBy = sys_category.uid
关于这两种方法的一般解释可以在here找到,该解释仅与MySQL有关,与TypoScript无关。
此外,您可以向连接添加更多约束,这样就不需要上述选项了。
【讨论】:
我可以确认,带有selectFields = DISTINCT sys_category.uid,sys_category.title
的选项1 将起作用。 groupBy
不是必需的。
非常感谢,两个选项都有效,我坚持使用选项一!以上是关于TYPO3 DatabaseQueryProcessor:相同 UID 的多个输出的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Typo3 版本 10 ($GLOBALS['TYPO3_DB']->sql_query()) 中执行普通 SQL?