2017-02-07 1 views
0

zwei Tabellen Position und Routen. Location-Tabelle enthält folgende Felder und WerteSo erstellen Sie übergeordnete untergeordnete Beziehung in PHP

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

Routen Tabelle enthält folgende Felder und Werte

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

alle möglichen Routen von der Quelle wie

zum Ziel finden wollen
bangalore-delhi 
    bangalore-mumbai-delhi 
    bangalore-mumbai-kolkatta-delhi 
    bangalore-kolkatta-delhi 

bitte helfen Sie mir Erreichen Sie dieses Ergebnis

+0

Zuerst benennen Sie Ihre Spalte 'von' & 'zu', um etwas anderes als es ein reservierter MySQL Schlüsselwort ist. – Kitson88

+0

So etwas vielleicht? http://StackOverflow.com/Questions/9535819/Find-all-Paths-between-Two-Graph-Nodes – Yoshi

+1

Dies könnte leicht in das Problem der reisenden Verkäufer werden: https://www.google.de/webhp? sourceid = chrome-instant & ion = 1 & espv = 2 & ie = UTF-8 # q = Reisen + Verkäufer + Problem – ADyson

Antwort

0

Verwenden Sie Ihre vorhandenen Daten von yo ur zwei Tabellen, könnten Sie LEFT JOIN Spalten Quelle und Ziel von Routen Ihre INT Werte Bedeutung bis zum Location.name Spalte übereinstimmen. Dann stellen Sie sicher, dass Sie die Daten durch Quelle Spalte für so bestellen, ist es einfacher, mit PHP später zu sortieren.

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 

Ausgang:

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

Dann wird Ihr DB Ergebnisse in mehrdimensionales Array fügen Sie den Quellnamen als Schlüssel.

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

foreach ($result as $v) { 

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

Ausgang:

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

Für das neue Array ausgibt, können Sie eine rekursive Funktion verwenden:

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); 
     } 
    } 
} 

Ausgang:

Quelle: bangalore

  • Reiseziel: delhi
  • Reiseziel: mumbai
  • Reiseziel: kolkatta

Quelle: mumbai

  • Reiseziel: delhi
  • Reiseziel: kolkatta

Quelle: kolkatta

  • Reiseziel: delhi
Verwandte Themen