【问题标题】:Typo3 - How to use the QueryInterface to order by the sum of children fields?Typo3 - 如何使用 QueryInterface 按子字段的总和排序?
【发布时间】:2021-03-10 12:05:55
【问题描述】:

我正在尝试使用 Typo3 中的 QueryInterface 添加订单,但我不知道如何将我的 mysql 查询转换为 Typo3 查询。

这是我的 mysql 查询:

SELECT * FROM `primary_table` pt
ORDER BY (
 IFNULL(
  (select SUM(a.score) from child_table_1 a 
   left join child_table_1_mm b on a.uid = b.uid_foreign 
   where b.uid_local = pt.uid and a.uid = 3), 0) +
 IFNULL(
  (select SUM(a.score) from child_table_2 a 
   left join child_table_2_mm b on a.uid = b.uid_foreign 
   where b.uid_local = pt.uid and a.uid = 2), 0) +
 IFNULL(
  (select SUM(a.score) from child_table_3 a 
   where a.uid = pt.child_table_3_uid and a.uid = 0), 0)) 
desc;

所以基本上,我有一个主表,我想订购该表的结果,但要根据每个相关表的分数相加。在我的例子中,child_table_1 和 child_table_2 与主表的关系是 1:n,而 child_table_3 是 1:1。

我已经有一个使用 QueryInterface 的订单.. 类似

$query->setOrderings(array('pt.firstname'=>QueryInterface:ORDER_ASCENDING));

我尝试直接复制粘贴我的 mysql-order-by-version,甚至尝试只使用一个孩子以使事情变得更容易,即使没有 IFNULL,但我总是遇到错误“属性的 ColumnMap”SUM(a “...”类的“”丢失。

我尝试在 php 中而不是直接在 mysql 中排序,但结果有限,因此我的排序无法正常工作,因为我没有所有结果。

我可以写类似的东西

$query->setOrderings(array('pt.child_table_1.score'=>QueryInterface:ORDER_DESCENDING));

但我无法在其中添加SUM,既不是uid = 3 的条件,也不是为每个孩子添加分数的可能性。

结果出库时需要排序。我不知道是否可以使用 TCA 配置文件完成某些操作。我在映射字段时看到了诸如 foreign_table 之类的属性,但我不知道如何在我的情况下使其工作。

如何通过 Typo3 的逻辑使用这个 mysql 顺序?

【问题讨论】:

    标签: mysql typo3 typo3-7.6.x queryinterface


    【解决方案1】:

    通常在连接到相关表的 TYPO3 字段中,应该将相关子项的数量作为一个值保存。每次添加或删除子项时,该字段的值都会更改。如果为0,则还没有连接子记录。

    因此,与其通过查询他们的表来计算相关子项的数量,不如按从主表中获取的那些字段的值进行排序。

    【讨论】:

    • 事情是我不想要孩子的数量,我需要为“子表”的每个孩子获取一个特定的值,并为每个“孩子”的每个孩子获取所有这些值的总和子表”
    • 也许在主表上添加字段将是解决方案,但如果我使用 Typo3“编辑页面界面”更改任何孩子的分数,我需要更改值。也许用钩子?
    • 别担心钩子不起作用,因为我需要考虑一些参数
    【解决方案2】:

    我会在父元素的模型中添加一个特殊属性。不必将其添加到 TCA 定义中。

    如果一般需要此附加属性,您可以在模型中进行必要的计算,也可以在需要此属性的特定控制器操作中进行。

    【讨论】:

      猜你喜欢
      • 2013-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多