如何在php中创建父子关系

时间:2017-02-07 09:46:11

标签: php mysql

两个表位置路线。位置表包含以下字段和值

id | name
1  | bangalore
2  | mumbai
3  | kolkatta
4  | delhi

路由表包含以下字段和值

id | source | desination
1  | 1    | 4
2  | 1    | 2
3  | 1    | 3
4  | 2    | 4
5  | 2    | 3
6  | 3    | 4

希望找到从源到目的地的所有可能路线,例如

 bangalore-delhi
    bangalore-mumbai-delhi
    bangalore-mumbai-kolkatta-delhi
    bangalore-kolkatta-delhi

请帮我实现这个结果

1 个答案:

答案 0 :(得分:0)

使用两个表中的现有数据,您可以{strong>路由 LEFT JOIN来源目的地,这意味着您的{{ 1}}值将匹配Location.name列。然后确保您通过 source 列对数据进行排序,以便以后使用PHP进行排序更容易。

<强> MySQL的:

INT

<强>输出:

SELECT locStart.name as start, locFinish.name as finish FROM `routes` 
LEFT JOIN location as locStart
ON routes.source = locStart.id
LEFT JOIN location as locFinish
ON routes.destination = locFinish.id
ORDER BY routes.source

然后使用源名称作为键将数据库结果添加到多维数组中。

array (
  0 => 
  array (
    'start' => ' bangalore',
    'finish' => 'delhi',
  ),
  1 => 
  array (
    'start' => ' bangalore',
    'finish' => 'mumbai',
  ),
  2 => 
  array (
    'start' => ' bangalore',
    'finish' => 'kolkatta',
  ),
  //Etc....

输出

$stmt = $pdo->query($query);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
$newArr;

foreach ($result as $v) {

    $newArr[$v['start']][] = $v['finish'];
}

要输出新数组,可以使用递归函数:

array (
  ' bangalore' => 
  array (
    0 => 'delhi',
    1 => 'mumbai',
    2 => 'kolkatta',
  ),
  'mumbai' => 
  array (
    0 => 'delhi',
    1 => 'kolkatta',
  ),
  'kolkatta' => 
  array (
    0 => 'delhi',
  ),
)

输出

来源:班加罗尔

  • 目的地:德里
  • 目的地:孟买
  • 目的地:kolkatta

资料来源:孟买

  • 目的地:德里
  • 目的地:kolkatta

来源:kolkatta

  • 目的地:德里