PDA

View Full Version : Simplifying this vB defined function, and eliminating the extra-queries.


Velocd
05-12-2003, 02:10 AM
This is sparked off from the thread by MadMax titled "How to check version," from the post where filburt said never to include queries inside a while loop.

This is obvious because most of the time there are easy ways to get around not having to include a query within a while loop.

But-- there is a defined recursive function in adminfunctions.php, called get makeforumchooser(), that does query in a while loop, and for good reason-- as I've tried to figure out a more efficient way of doing it (for another script of mine), but can't seem to.

function makeforumchooser($name="forumid",$selectedid=-1,$forumid=-1,$depth="",$topname="No one",$title="Forum Parent",$displaytop=1,$displayid=0) {
// $selectedid: selected forum id; $forumid: forumid to begin with;
// $depth: character to prepend deep forums; $topname: name of top level forum (ie, "My BB", "Top Level", "No one");
// $title: label for the drop down (listed to the left of it); $displaytop: display top level forum (0=no; 1=yes)

global $DB_site;

if ($forumid==-1) {
echo "<tr class='".getrowbg()."' valign='top'>\n<td><p>$title</p></td>\n<td><p><select name=\"$name\" size=\"1\">\n";
if ($displaytop==1) {
echo "<option value=\"-1\" ".iif($selectedid==$forumid,"SELECTED","").">$depth$topname</option>\n";
}
} else {
$foruminfo=$DB_site->query_first("SELECT forumid,title,allowposting
FROM forum
WHERE forumid=$forumid");
echo "<option value=\"$foruminfo[forumid]\" " . iif($selectedid==$forumid,"SELECTED","") . ">
$depth$foruminfo[title]" . iif($foruminfo['allowposting'],""," (no posting)").iif($displayid," $foruminfo[forumid]","--")."</option>\n";
}

$depth.="--";

$forums=$DB_site->query("SELECT forumid FROM forum WHERE parentid=$forumid ORDER BY displayorder");
while ($forum=$DB_site->fetch_array($forums)) {
makeforumchooser("forumid",$selectedid,$forum[forumid],$depth,"","",1,$displayid);
}

if ($forumid==-1) {
echo "</select>\n</p></td>\n</tr>\n";
}
}

The basic apparent problem with querying in a while-loop in this situation is that for every forum added, a query is added.

Xenon
05-12-2003, 07:13 PM
well always remember, the admincp is not the board itself.
in acp you can use queries in a loop as it's easier to write and you are normally the only one who is involved.

but if you really want to eleminate the queries, take a closer look at the get forumjump function of vb and remove the permission parts from it :)