如何在php中创建父子关系
两个表位置和路线。位置表包含以下字段和值如何在php中创建父子关系,php,mysql,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 Routes表包含以下字段和值 id | name 1 | bangalore 2 | mumbai 3
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
Routes表包含以下字段和值
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
请帮助我实现此结果使用两个表中的现有数据,您可以从路由左连接
列源和目标,这意味着您的INT
值将与Location.name列匹配。然后确保按源列对数据进行排序,以便以后更容易使用PHP进行排序
MySQL:
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....
输出:
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....
然后使用源名称作为键将DB结果添加到多维数组中
$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',
),
)
要输出新数组,可以使用递归函数:
function recurse($newArr, $key=NULL) {
if($key !== NULL) {
foreach ($newArr[$key] as $k=>$v) {
echo '<li>Destination: ' . $v . '</li>';
}
echo '</ul>';
} else {
foreach ($newArr as $k=>$v) {
echo 'Source: ' . $k . '<br><ul>';
recurse($newArr, $k);
}
}
}
函数递归($newArr,$key=NULL){
如果($key!==NULL){
foreach($newArr[$key]作为$k=>$v){
回显“目的地:”.$v. ”;
}
回声“”;
}否则{
foreach($newArr为$k=>$v){
回声“来源:”.$k.“
”;
递归($newArr,$k);
}
}
}
输出:
array (
' bangalore' =>
array (
0 => 'delhi',
1 => 'mumbai',
2 => 'kolkatta',
),
'mumbai' =>
array (
0 => 'delhi',
1 => 'kolkatta',
),
'kolkatta' =>
array (
0 => 'delhi',
),
)
资料来源:班加罗尔
- 目的地:德里
- 目的地:孟买
- 目的地:加尔各答
- 目的地:德里
- 目的地:加尔各答
- 目的地:德里