Php 从表中选择行,并使用多个相关列进行排序
我有一个包含“团队”信息的表格。团队可以有子团队——每一行都有一个“父团队id”列,该列包含该子团队父团队的“团队id”。下面是一个数据示例: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
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所展示的,关键是,即使忽略兄弟姐妹的排序,这也正是分层查询的目的!