Typo3 Typoscript-Select 在 where 条件中使用 OR 运算符
Typo3 Typoscript-Select use OR-operator in where condition
我尝试 select table sys_files 中与类别或子类别链接的所有文件。
在我的示例中,文件的主要类别的 ID 为 1,并且上面有一些子类别。
我首先创建了 SQL-代码,直接在数据库上试用:
SELECT sys_file.name, sys_file.identifier, sys_category.title
FROM sys_category
RIGHT JOIN sys_file_metadata ON (sys_file_metadata.categories =
sys_category.uid)
JOIN sys_file ON (sys_file.uid = sys_file_metadata.file)
WHERE (sys_category.parent = 1) OR (sys_category.uid = 1)
order By sys_category.title
正如预期的那样工作正常。
现在,我尝试在打字中做类似的事情,看起来像:
lib.documentindex = CONTENT
lib.documentindex {
wrap = <ul>|</ul>
table = sys_category
select {
selectFields = sys_file.name, sys_file.identifier, sys_category.title
rightjoin = sys_file_metadata ON (sys_file_metadata.categories = sys_category.uid) join sys_file ON (sys_file.uid = sys_file_metadata.file)
where = sys_category.uid = 1 OR sys_category.parent = 1
orderBy = sys_category.title
}
renderObj = COA
renderObj.wrap = <li>|</li>
renderObj.10 = TEXT
renderObj.10 {
field = identifier
wrap = <a href="|">
}
renderObj.20 = TEXT
renderObj.20.field = name
renderObj.30 = TEXT
renderObj.30.value = </a>
}
这是行不通的。但真正奇怪的是,它半途而废。
所以如果我这样写 where:
where = sys_category.uid = 1 OR sys_category.parent = 1
它显示为类别为 1 的所有文件。
但是它不显示id为1的类别的文件。
我现在这样写吗
where = sys_category.parent = 1 OR sys_category.uid = 1
相反,它显示 id 为 1 的类别的文件。但是 none 父 id 为 1 的文件。
在select(发现here)的官方文档中,它只是告诉where-option:
WHERE clause without the word "WHERE".
但这还不是全部。我尝试了很多东西,但几乎所有我尝试过的东西都不像真正的 SQL 代码。我不知道这个 typo3-thing 是否有问题,或者我只是完全错误地使用它。
你试过数据处理吗?您可以组合两个数据库查询处理器来获得您所需要的。参见:https://docs.typo3.org/typo3cms/TyposcriptReference/7.6/ContentObjects/Fluidtemplate/Index.html#dataprocessing
我认为你的查询是错误的(即使是纯 SQL)。
永远不会(?)立即引用类别,但总是在 sys_category_record_mm
.
中使用 mm-records
因此,您的加入需要是另一个加入 sys_category
和 sys_file
通过这些 mm-records(和 sys_file_metadata
记录):
SELECT sys_file.name, sys_file.identifier, sys_category.title
FROM sys_category
JOIN sys_category_record_mm
ON sys_category_record_mm.uid_local = sys_category.uid
JOIN sys_file_metadata
ON sys_file_metadata.uid = sys_category_record_mm.uid_foreign
JOIN sys_file
ON sys_file_metadata.file = sys_file.uid
WHERE sys_category_record_mm.tablenames = "sys_file_metadata"
AND sys_category_record_mm.fieldname = "categories"
AND ((sys_category.parent = 1) OR (sys_category.uid = 1))
ORDER By sys_category.title
注意: 分类记录中有类别字段,但这些字段只包含引用的计数器(由 mm-records 给出)。不是类别的uid。
如果您经常使用 uid = 1 的类别,可能会产生误导。
这是实现此查询的拼写错误:
编辑:包含 TypoScript(作者 FuFu)
这 typoscript-select 对我有用,但我必须将类别从根目录移到第一页。
lib.documentindex = CONTENT
lib.documentindex {
wrap = <ul>|</ul>
table = sys_category
select {
pidInList = 1
recursive = 1000
selectFields = sys_file.name, sys_file.identifier, sys_category.title
join = sys_category_record_mm ON (sys_category_record_mm.uid_local = sys_category.uid) JOIN sys_file_metadata ON (sys_file_metadata.uid = sys_category_record_mm.uid_foreign) JOIN sys_file ON (sys_file_metadata.file = sys_file.uid)
where = (sys_category_record_mm.tablenames = "sys_file_metadata") AND (sys_category_record_mm.fieldname = "categories") AND ((sys_category.parent = 1) OR (sys_category.uid = 1))
orderBy = sys_category.title
}
renderObj = COA
renderObj.wrap = <li>|</li>
renderObj.10 = TEXT
renderObj.10 {
field = identifier
wrap = <a href="|">
}
renderObj.20 = TEXT
renderObj.20.field = name
renderObj.30 = TEXT
renderObj.30.value = </a>
}
作为
我尝试 select table sys_files 中与类别或子类别链接的所有文件。
在我的示例中,文件的主要类别的 ID 为 1,并且上面有一些子类别。
我首先创建了 SQL-代码,直接在数据库上试用:
SELECT sys_file.name, sys_file.identifier, sys_category.title
FROM sys_category
RIGHT JOIN sys_file_metadata ON (sys_file_metadata.categories =
sys_category.uid)
JOIN sys_file ON (sys_file.uid = sys_file_metadata.file)
WHERE (sys_category.parent = 1) OR (sys_category.uid = 1)
order By sys_category.title
正如预期的那样工作正常。
现在,我尝试在打字中做类似的事情,看起来像:
lib.documentindex = CONTENT
lib.documentindex {
wrap = <ul>|</ul>
table = sys_category
select {
selectFields = sys_file.name, sys_file.identifier, sys_category.title
rightjoin = sys_file_metadata ON (sys_file_metadata.categories = sys_category.uid) join sys_file ON (sys_file.uid = sys_file_metadata.file)
where = sys_category.uid = 1 OR sys_category.parent = 1
orderBy = sys_category.title
}
renderObj = COA
renderObj.wrap = <li>|</li>
renderObj.10 = TEXT
renderObj.10 {
field = identifier
wrap = <a href="|">
}
renderObj.20 = TEXT
renderObj.20.field = name
renderObj.30 = TEXT
renderObj.30.value = </a>
}
这是行不通的。但真正奇怪的是,它半途而废。 所以如果我这样写 where:
where = sys_category.uid = 1 OR sys_category.parent = 1
它显示为类别为 1 的所有文件。 但是它不显示id为1的类别的文件。
我现在这样写吗
where = sys_category.parent = 1 OR sys_category.uid = 1
相反,它显示 id 为 1 的类别的文件。但是 none 父 id 为 1 的文件。
在select(发现here)的官方文档中,它只是告诉where-option:
WHERE clause without the word "WHERE".
但这还不是全部。我尝试了很多东西,但几乎所有我尝试过的东西都不像真正的 SQL 代码。我不知道这个 typo3-thing 是否有问题,或者我只是完全错误地使用它。
你试过数据处理吗?您可以组合两个数据库查询处理器来获得您所需要的。参见:https://docs.typo3.org/typo3cms/TyposcriptReference/7.6/ContentObjects/Fluidtemplate/Index.html#dataprocessing
我认为你的查询是错误的(即使是纯 SQL)。
永远不会(?)立即引用类别,但总是在 sys_category_record_mm
.
中使用 mm-records
因此,您的加入需要是另一个加入 sys_category
和 sys_file
通过这些 mm-records(和 sys_file_metadata
记录):
SELECT sys_file.name, sys_file.identifier, sys_category.title
FROM sys_category
JOIN sys_category_record_mm
ON sys_category_record_mm.uid_local = sys_category.uid
JOIN sys_file_metadata
ON sys_file_metadata.uid = sys_category_record_mm.uid_foreign
JOIN sys_file
ON sys_file_metadata.file = sys_file.uid
WHERE sys_category_record_mm.tablenames = "sys_file_metadata"
AND sys_category_record_mm.fieldname = "categories"
AND ((sys_category.parent = 1) OR (sys_category.uid = 1))
ORDER By sys_category.title
注意: 分类记录中有类别字段,但这些字段只包含引用的计数器(由 mm-records 给出)。不是类别的uid。
如果您经常使用 uid = 1 的类别,可能会产生误导。
这是实现此查询的拼写错误:
编辑:包含 TypoScript(作者 FuFu) 这 typoscript-select 对我有用,但我必须将类别从根目录移到第一页。
lib.documentindex = CONTENT
lib.documentindex {
wrap = <ul>|</ul>
table = sys_category
select {
pidInList = 1
recursive = 1000
selectFields = sys_file.name, sys_file.identifier, sys_category.title
join = sys_category_record_mm ON (sys_category_record_mm.uid_local = sys_category.uid) JOIN sys_file_metadata ON (sys_file_metadata.uid = sys_category_record_mm.uid_foreign) JOIN sys_file ON (sys_file_metadata.file = sys_file.uid)
where = (sys_category_record_mm.tablenames = "sys_file_metadata") AND (sys_category_record_mm.fieldname = "categories") AND ((sys_category.parent = 1) OR (sys_category.uid = 1))
orderBy = sys_category.title
}
renderObj = COA
renderObj.wrap = <li>|</li>
renderObj.10 = TEXT
renderObj.10 {
field = identifier
wrap = <a href="|">
}
renderObj.20 = TEXT
renderObj.20.field = name
renderObj.30 = TEXT
renderObj.30.value = </a>
}
作为