两个表位置和路线。位置表包含以下字段和值
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
请帮我实现这个结果
答案 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