mysql / php activerecord连接并通过另一个连接进行排序

时间:2018-07-11 12:11:33

标签: mysql activerecord

我正在努力应对以下情况。在工作中的工作系统上,我们扩展了功能,以允许多个团队拥有不同的工作状态。因此,我们有3个相关的表Jobs,其中包含工作编号以及与团队和其他列有关的字段。 job_state_items表具有job_number,group_id和progress_id,最后是job_states表,其中具有progress_id,值字段和应用程序其他部分中使用的替代ID。

然后,我们在可排序的分页表中列出所有作业,该表可对每个排序列正常工作,但按job_status_item id排序的进度除外。

所以说job_states表具有3行,如下所示(为简化起见)

id value
1  Not Allocated
2  Allocated
3  Finished

和job_state_items是(再次简化)

id job_number group progress
1  166457     1     3
2  166457     2     1
3  166458     1     2
4  166459     1     1

因此,当我们默认创建查询时,我们正在查看第1组的作业,因此按job_number排序(简化)

job_number progress
166457     Finished
166458     Allocated
166459     Not Allocated

以上是正确的,但是当我按进度排序时,我会得到

166459     Not Allocated
166458     Allocated
166457     Finished

,它按job_state_items表中的进度ID排序。我期望的结果是

166458     Allocated
166457     Finished
166459     Not Allocated

,它按job_states表中的值排序。我正在此项目上使用php activerecord,因为它在继承时已经存在于项目中。

所以我首先创建查询所需的条件数组(再次简化) 组=? AND job_number IN(?,?,?)

1
166457
166458
166459

(我在这里使用IN,因此我们仅使用与job_state_items相关联的职位编号,但是如果有其他可行的解决方案,则可以更改此职位编号)

然后我添加如下联接

左联接(     SELECT job_state_items。*     来自job_state_items     GROUP BY job_number )AS walias_jsi ON(walias_jsi.job_number = jobs.number)

我也尝试过

LEFT JOIN(
    SELECT job_state_items.*
    FROM job_state_items JOIN job_states ON
    job_state_items.job_progress = job_states.status_id
    GROUP BY job_number
    ORDER BY job_states.value
) AS walias_jsi ON ( walias_jsi.job_number = jobs.number)

但是结果与上面的join完全相同。

job_states表中的文本值是在基于job_number,进度及其值的组进行呈现时计算得出的。

关于如何对该查询进行排序的任何建议,以便对返回的项目进行正确的排序,以便在呈现正确的字母顺序时显示出来?

谢谢

克雷格

0 个答案:

没有答案