Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从表中选择行,并使用多个相关列进行排序_Php_Sql_Oracle_Stored Procedures - Fatal编程技术网

Php 从表中选择行,并使用多个相关列进行排序

Php 从表中选择行,并使用多个相关列进行排序,php,sql,oracle,stored-procedures,Php,Sql,Oracle,Stored Procedures,我有一个包含“团队”信息的表格。团队可以有子团队——每一行都有一个“父团队id”列,该列包含该子团队父团队的“团队id”。下面是一个数据示例: team_id team_name parent_id 1 sales (null) 2 executives (null) 3 emea sales 1 4 apac sales 1 5 uk sales 3

我有一个包含“团队”信息的表格。团队可以有子团队——每一行都有一个“父团队id”列,该列包含该子团队父团队的“团队id”。下面是一个数据示例:

team_id    team_name    parent_id
1           sales        (null)
2           executives   (null)
3           emea sales   1
4           apac sales   1
5           uk sales     3
我试图实现的只是按照team_id的顺序选择表中的所有行,但我希望子团队也按照team_id的顺序在其父团队之后返回。因此,对于上面的示例数据,我希望按照以下顺序返回数据:

team_id    team_name    parent_id
1           sales        (null)
3           emea sales   1
5           uk sales     3
4           apac sales   1
2           executives   (null)
我花了几个小时思考如何实现这一点,但真的没有想出任何有用的方法!如果有人给我指点怎么做,我将不胜感激


请注意,我正在处理一个现有的项目,无法真正对数据库/实现进行重大更改。我正在使用PHP和Oracle以及存储过程,这对我来说是新的。

您可以使用带有
ORDER SIBLIENDS BY
子句的分层查询,如下所示:

WITH teams AS (SELECT 1 team_id, 'sales' team_name, NULL parent_id FROM dual UNION ALL
               SELECT 2 team_id, 'executives' team_name, NULL parent_id FROM dual UNION ALL
               SELECT 3 team_id, 'emea sales' team_name, 1 parent_id FROM dual UNION ALL
               SELECT 4 team_id, 'apac sales' team_name, 1 parent_id FROM dual UNION ALL
               SELECT 5 team_id, 'uk sales' team_name, 3 parent_id FROM dual)
SELECT team_id,
       team_name,
       parent_id
FROM   teams
CONNECT BY PRIOR team_id = parent_id
START WITH parent_id IS NULL
ORDER SIBLINGS BY team_id;

   TEAM_ID TEAM_NAME   PARENT_ID
---------- ---------- ----------
         1 sales      
         3 emea sales          1
         5 uk sales            3
         4 apac sales          1
         2 executives 

为什么不使用php实现这一点?@Vasil我可能会尝试使用php实现我想要的目标,但我之所以选择SQL解决方案,是因为团队的数量未知,我将按照我指定的顺序检索和显示每页50条记录。如果不更改数据库,我想我无法在这方面为您提供帮助。那么多个查询呢?这与PHP无关,它可以(而且应该)在数据库中高效地完成。正如Boneist所展示的,关键是,即使忽略兄弟姐妹的排序,这也正是分层查询的目的!