0

このようにDB構造を持っています。

stopid  | parentid
2       |        1
3       |        1
5       |        2
9       |        2
8       |        2
11      |        3
11      |        9

始発駅と終点駅を検索したい。それは一種のソートまたはプログラムによる検索です。私は親IDとして最初のストップを持っています。そしてstopidとしての最終停止。最初のストップを 1 から 11 まで検索する必要があるため、最後のストップ 11 から開始するようにロジックを配置し、ループを再帰します。彼らの任意のロジックです。私は試しましたが、成功しませんでした。すべてのルートを終了する必要はありません。互換性のある最初のルートが必要です。お気に入り..

1 -> 3 -> 11 または 1 -> 2 -> 9 -> 11 このように...

extract($_POST);
echo "From :$from to $to".'<br/>';
$sql="select parentid, stopid from routes WHERE stopid = '".$to."' ";
echo $sql.'<br/>';
$result = mysql_query($sql) or die(mysql_error());
$count = mysql_num_rows($result) or die( mysql_error());
$stopid = array(); 
while( $row = mysql_fetch_array($result)) {
    $stopid[$row['stopid']][] = $row['parentid'];
}
echo '<pre>';

$countarray = count($stopid); 
while($countarray >= 1){
    foreach($stopid as $finalstop_value){
        foreach($finalstop_value as $finalstop_ky => $finalstop_vl){
            $query = "SELECT * FROM routes WHERE stopid = '".$finalstop_vl."'";
            $sql = mysql_query($query) or die(mysql_error());
            echo $query. ' Gives '.mysql_num_rows($sql).' rows...<br/>';
            while( $row = mysql_fetch_array($sql))  { 
                $new_stopid[$finalstop_vl][$row['stopid']][] = $row['parentid']; 
            }
            echo '<pre>';
            print_r($new_stopid);
                            // $stopid[$finalstop_vl][] = $new_stopid;
            $countarray--; 
        }
    }

}       
print_r($stopid);
exit;
4

1 に答える 1

0

私が理解していることから、いくつかの2つのノードを接続するパスを検索するためにスキャンする必要があるn-aryツリー構造があります。これは古典的なアルゴリズムの問​​題であり、多くの解決策があなたを待っています ;-)

投稿で言及していない特定のプロパティがツリーにない場合は、幅優先検索を実装することをお勧めします。

于 2012-07-28T14:22:25.520 に答える