簡體   English   中英

Typo3 Typoscript-Select在以下情況下使用OR運算符

[英]Typo3 Typoscript-Select use OR-operator in where condition

我嘗試從與類別或子類別鏈接的表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 = sys_category.uid = 1 OR sys_category.parent = 1

它顯示為父類別為1的所有文件。但不顯示ID為1的類別的文件。

我現在寫得像嗎

where = sys_category.parent = 1 OR sys_category.uid = 1

它以相反的方式工作,它顯示的ID為1的類別的文件,但顯示父ID為1的類別的文件。

在select的官方文檔(可在此處找到)中,它僅說明了where-option:

WHERE子句,不含單詞“ WHERE”。

但這並不是全部。 我嘗試了很多事情,並且幾乎所有嘗試的行為都不像真正的SQL代碼。 我不知道這種錯別字是不是像地獄般的越野車,還是我完全錯誤地使用它。

我認為您的查詢是錯誤的(甚至是純SQL)。
類別從不立即引用(?),但始終與sys_category_record_mm的mm記錄一起sys_category_record_mm
因此,您的sys_category需要是另一sys_category ,您sys_file通過以下mm記錄(和sys_file_metadata記錄)將sys_file_metadatasys_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記錄提供)。 它不是類別的uid。
如果您經常使用uid = 1的類別,可能會產生誤導。

這是實現此查詢的文字:

編輯:包含TypoScript(由 FuFu編寫此錯字選擇對我有用,但我必須將類別從根目錄移到第一頁。

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>

}

您是否嘗試過DataProcessing? 您可以結合使用兩個DatabaseQueryProcessor來獲得所需的內容。 參見: https : //docs.typo3.org/typo3cms/TyposcriptReference/7.6/ContentObjects/Fluidtemplate/Index.html#dataprocessing

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM