我正在努力应对以下情况。在工作中的工作系统上,我们扩展了功能,以允许多个团队拥有不同的工作状态。因此,我们有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,进度及其值的组进行呈现时计算得出的。
关于如何对该查询进行排序的任何建议,以便对返回的项目进行正确的排序,以便在呈现正确的字母顺序时显示出来?
谢谢
克雷格