左表是我查询的结果。我需要将其排序为正确的表格。
如果 level >= 2
,我需要按 p_id 排序
。右表蓝色框是order by
的目标。
这可能吗?当然这是一个例子。实际数据有数百个,确实需要排序。
我搜索了很多,但找不到相同的案例。
编辑:此表将以 java.util.ArrayList
形式返回。如果这种“order by”不可能,那么在java.util.ArrayList
中是否可能?
最佳答案
我确信在 MySQL 的一次查询中这是不可能的。
在右侧的图表中,排序是通过两个单独的步骤完成的:
按 ID 排序
如果 level >= 2,则按 p_id 对每个 block 进行排序
这在 MySQL 中很难做到,因为您需要识别 block ,然后迭代它们,分别对每个 block 进行排序。
我做了类似的事情,需要在 block 内排序,然后从这些有序 block 中进行选择。您可以查看here但正如我所说,我认为 SQL 代码非常复杂,涉及 5 个临时表。您可能需要更少的临时表,但这仍然是一个非常复杂的过程,非常慢且难以维护。
"Actual data is hundreds and really need to be sorted."
有什么理由不能在代码中按照您想要的方式对其进行排序吗?
$blockStart = FALSE;
$count = 0;
foreach($dataArray as $data){
if($blockStart === FALSE){
$blockStart = $count;
}
if($data['level'] < 2){ //Block has finished
sortBlock($dataArray, $blockStart, $count);
$blockStart = $count;
}
$count++;
}
sortBlock($dataArray, $blockStart, $count - 1);
function sortBlock($dataArray, $indexStart, $indexEnd){
//Sort the elements of $dataArray, between $indexStart and $indexEnd inclusive
//by the value of p_id
}
尝试在 MySQL 中解决一般编程问题,而在 Java 中可以用程序员 1/10 的时间来解决它(而且可能还可以使其执行速度更快),这并不是一条好走的路。
关于mysql - MYSQL 中的条件排序。应该影响行的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14249663/