mysql - MYSQL 中的条件排序。应该影响行的一部分

标签 mysql sql-order-by

enter image description here

左表是我查询的结果。我需要将其排序为正确的表格。

如果 level >= 2,我需要按 p_id 排序。右表蓝色框是order by的目标。

这可能吗?当然这是一个例子。实际数据有数百个,确实需要排序。

我搜索了很多,但找不到相同的案例。

编辑:此表将以 java.util.ArrayList 形式返回。如果这种“order by”不可能,那么在java.util.ArrayList中是否可能?

最佳答案

我确信在 MySQL 的一次查询中这是不可能的。

在右侧的图表中,排序是通过两个单独的步骤完成的:

  1. 按 ID 排序

  2. 如果 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/

相关文章:

php - 手动获取从主要 WordPress 网站到 WordPress 博客的链接

mysql - ado.net实体数据模型和mysql - UTF8问题

mysql - phpmyadmin 更改现有表的 char_set

sql - 根据 bool 列升序或降序

php - 向数据库发送日期查询

mysql - 使用 Smart Mobile Studio 与 mySQL 数据库交互

php - ORDER BY 两个日期mysql查询

sql - SQL Server 中的 Order By 将正值放在负值之前

mysql - 带有 ORDER BY '$x' 的 LEFT OUTER JOIN 未正确排序

PHP 使用 ORDER BY 查询 MySQL 对数据库项目进行排序