我正在尝试使用 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,但我总是有错误“The ColumnMap for property “SUM(a” of class “...“ 不见了。
我尝试在 php 中而不是直接在 mysql 中对其进行排序,但是结果有限,因此我的排序无法正常工作,因为我没有所有结果。
我可以写类似的东西
$query->setOrderings(array('pt.child_table_1.score'=>QueryInterface:ORDER_DESCENDING));
但我不能在其中添加一个,也不是为每个孩子添加分数SUM
的条件或可能性。uid = 3
出库时必须对结果进行排序。我不知道是否可以使用 TCA 配置文件完成某些事情。我在映射字段时看到了诸如 foreign_table 之类的属性,但我不知道如何在我的情况下使其工作。
如何通过 Typo3 的逻辑使用这个 mysql 顺序?