使用typo3扩展通量9.0.1更新colPos

Posted

技术标签:

【中文标题】使用typo3扩展通量9.0.1更新colPos【英文标题】:Update colPos with typo3 extension flux 9.0.1 【发布时间】:2019-04-29 07:17:16 【问题描述】:

由于更新到 9.0.1,我需要更新元素的 colPos。

这很好用:

UPDATE `tt_content` 
SET colPos = ((tx_flux_parent * 100) + 11) 
WHERE tx_flux_column = "content";

但我还需要更新本地化的内容元素。它在 tx_flux_parent 中有本地化的父 uid。但我需要标准语言的父 uid。

我需要通过 l18n_parent 获取 tt_content 中的值“tx_flux_parent”。 所以我试图用 l18n_parent 构建一个查询,如下所示:

UPDATE `tt_content` as t1 
SET colPos = (( (SELECT t2.tx_flux_parent 
                 FROM tt_content t2 
                 WHERE t1.l18n_parent = t2.uid) * 100) + 11) 
WHERE t1.tx_flux_column = "content";

得到这个:

mysql 融合:Dokumentation 1093 - 表 't1' 被指定了两次,都 作为“更新”的目标和单独的数据源

【问题讨论】:

MySQL 不允许在 IN() 子句等内的子查询中引用正在更新的表。但是您的伪代码还有另一个问题。如果从您的子查询中收到多行怎么办? 是的,我更新了代码。如何从子查询(父)中获取值并将其设置在子行中? 【参考方案1】:

MySQL 不允许在另一个子查询中再次引用表正在更新除非它位于 FROM 子句 (Derived Table) 内。

但是,在这种特殊情况下,您可以使用“Self-Join”:

UPDATE `tt_content` as t1 
JOIN `tt_content` as t2 
  ON t1.l18n_parent = t2.uid 
SET t1.colPos = ((t2.tx_flux_parent * 100) + 11) 
WHERE t1.tx_flux_column = 'content'

【讨论】:

以上是关于使用typo3扩展通量9.0.1更新colPos的主要内容,如果未能解决你的问题,请参考以下文章

Fluid Typo3 - 如何获取通过来自不同页面 uid 的通量定义的变量

TYPO3:重命名通量字段并保留值?

Typo3:通量和显示条件

Typo3 6.2:FCE(通量)中的表记录

如何将 TYPO3 页面模板中定义的通量表单字段存储在数据库列中而不是弹性字段中?

tt_address:更新到 Typo3 6.2 后后端未显示扩展字段