我尝试创建一个查询以获取所有带有至少两个不同类别标记的新闻项,并且它们必须与AND子句匹配。
无论是否应呈现以下代码,我都需要此查询来做出决定。例如。如果没有类别为A和类别B的新闻,则不执行任何操作。否则显示tx_news LIST视图。
lib.field_dmnewsplugin.5 = CONTENT
lib.field_dmnewsplugin.5 {
table = tx_news_domain_model_news
select {
pidInList = 124
max = 9
orderBy = uid DESC
leftjoin = sys_category_record_mm ON (sys_category_record_mm.uid_foreign = tx_news_domain_model_news.uid)
#andWhere = sys_category_record_mm.uid_local IN (14,16)
#where = sys_category_record_mm.uid_local = 14
andWhere = sys_category_record_mm.uid_local = 14 AND sys_category_record_mm.uid_local = 16
}
renderObj = COA
renderObj {
1 = TEXT
1.value = Aktuelles
1.wrap = <h2>|</h2>
2 = TEXT
2.field = title
2.crop = 50|...|1
2.wrap = <h3>|</h3>
3 = TEXT
3.field = teaser
3.crop = 500|...|1
3.wrap = <p>|</p>
}
}
我的代码是一些测试的结果。使用“ andWhere”子句,结果为空。如果没有任何where子句,我将为所有新闻项输入两次条目,因为它们都至少具有两个不同的类别。 我的目标是为每个新闻项获得唯一的结果,并标记为类别A和类别B(并且可能作为通用解决方案附加类别)。
我该怎么办?
先谢谢您
拉尔夫
答案 0 :(得分:0)
尝试将WHERE子句放入JOIN的ON部分,并使用groupBy获取计数器。
select {
selectFields = count(*) AS counter
leftjoin = sys_category_record_mm ON (sys_category_record_mm.uid_foreign = tx_news_domain_model_news.uid) AND sys_category_record_mm.uid_local IN (14,16)
pidInList = 124
max = 9
groupBy = uid
orderBy = uid DESC
where = counter > 1
}
答案 1 :(得分:0)
在我不得不意识到乔的解决方案对我不起作用之后,我有了另一个主意:
lib.field_dmnewsplugin = COA
lib.field_dmnewsplugin {
10 = CONTENT
10 {
table = tx_news_domain_model_news
select {
selectFields = title, teaser, count(uid) AS counter
leftjoin = sys_category_record_mm ON (sys_category_record_mm.uid_foreign = tx_news_domain_model_news.uid) AND sys_category_record_mm.uid_local IN ({14,###maincat###)
pidInList = 124
max = 1
groupBy = uid
orderBy = counter DESC, crdate DESC
#where = counter > 1
markers {
maincat.value = 16
}
}
renderObj = COA
renderObj {
10 = COA
10 {
stdWrap {
if {
value = 1
isGreaterThan.data = field:counter
#equals.data = field:counter
}
required = 1
wrap = <h2>Some Headline</h2>
}
10 = USER
10 {
userFunc = TYPO3\CMS\Extbase\Core\Bootstrap->run
extensionName = News
pluginName = Pi1
vendorName = GeorgRinger
switchableControllerActions {
News {
1 = list
}
}
settings < plugin.tx_news.settings
settings {
cropMaxCharacters = 164 | [...] | 1
categoryConjunction = and
categories = 14,16
excludeAlreadyDisplayedNews = 1
archiveRestriction = active
[...]
问题是,我们不能在where子句中使用别名“ counter”,并且我不知道如何解决错字问题。使用本地SQL可能会有更好的方法。
但是我能够获得“ counter”的值来创建“ if”规则。另外,我可以按“计数器”对查询进行排序。因此,如果查询返回的至少一个“计数器”大于1的匹配,我可以决定渲染一个COA对象,例如带有标题的新闻列表视图。
我对这个解决方案感到满意。但是也许,有人对我有特殊的把戏?
感谢您的帮助,
拉尔夫