>I have a table with id, pid(parent), title and page_name(url) fields. > >The vars provided to the script are the current page's title, id and >pid(parent)
You can look up the parent and in the database, so it's not horribly important that those be provided. *UNLESS* you have a heterarchy, and not a hierarchy -- In other words, *UNLESS* there are two different "paths" to get to 'id' through different parents. In other other words, *UNLESS* you have duplicate id's in the database... If you *DO* have a heterarchy, you'd need to track the user's path as they traveled to know which route to display. I'll assume you don't have a heterarchy, for now. >When I am on the parent page I get this(Which is what I want): >[ Chronological History ][ Website Chronological History ] > >When I am in the Child I get this: > >[ Website Chronological History ][ Website Chronological History ] > >What am I doing wrong??? You really can't get all the parents in one SQL statement. You'll need to look up the parent. Then the grand-parent. Then the great-grand-parent. And so on. Each with a different SQL query. Now, this is not ideal for performance. In fact, it's *HORRIBLE* if (A) your tree is really "deep" -- If you have 10 generations of "depth" to the ggggg'great-grand-parents, then it's gonna take 9 queries to look it up. If you're only looking at three or four levels, it's really no big deal... Unless your site is, like, getting a zillion hits. Let's assume it's not getting a zillion hits for now, okay? >I have stared at this two many times now and am probably missing the obvious > >function menu($id, $pid, $title) { > $query = "select * from meta_data WHERE pid = '$id' OR pid = '$pid' && >pid != 0"; This will give both the current record and the parent record, but never, ever, ever, the grand-parent record... > $result = mysql_query($query); > $num_results = mysql_num_rows($result); > if($num_results != 0){ > ?> ><table width="100%"> ><tr><td align="center"> > <? > echo '[ '.$title.' ]'; > for ($i=0; $i < $num_results; $i++) > { > $row = mysql_fetch_array($result); > if($id == $row['id']){ > echo '[ '.$row['title'].' ]'; > } elseif($row['pid'] == $id || $row['id'] == $pid && $pid != 0) { > echo '[ <a >href="'.$row['page_name'].'">'.$row['title'].'</a> ]'; > } > } > ?> ></td></tr> ></table> > <? > } Try something more like this: function menu($id){ $query = "select pid, title from meta_data where id = $id"; $meta = mysql_query($query) or error_log(mysql_error()); # Check HTTP error_log for SQL errors! list($pid, $title) = mysql_fetch_row($meta, 0); if (isset($pid) && $pid)){ # Switch the menu() and $title parts around if you want bread-crumbs in the other direction $result = menu($pid) . $title; } else{ $result = ''; } return $result; } NOTE: There *ARE* techniques for encoding the SQL in such a way that a single SQL statement can get the entire "path" at once, but they get kinda complicated and gnarly, and, really, as I said, if you have a shallow tree, it's just not worth the hassle... If you have a really *DEEP* tree, you'll need to do some more research. -- Like Music? http://l-i-e.com/artists.htm -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php