I know it's slow to write.
I know the idea, but I can't do it.
All data should be taken out at once.
And then sort out the enlighten
function getBookmarkcategory($pid = 0, &$result = array(), $spac = 0) { if(MODULE_NAME=="Home"){ $ispublic=0; $uid=session('uid'); $ispublic+="And bookmarkcategory_staffid = $uid"; }else if(MODULE_NAME=="Admin"){ $ispublic=1; } $Model = new Model(); $spac = $spac + 8; $res=$Model->query( "SELECT * FROM x_bookmarkcategory WHERE bookmarkcategory_pid=$pid And bookmarkcategory_ispublic = $ispublic order by bookmarkcategory_sort"); foreach($res as $key=>$value){ $result[]=$res[$key]; getBookmarkcategory($value['bookmarkcategory_id'],$result,$spac); } return $result; } $list = getBookmarkcategory(); return $list;
Reply content:
I know it's slow to write.
I know the idea, but I can't do it.
All data should be taken out at once.
And then sort out the enlighten
function getBookmarkcategory($pid = 0, &$result = array(), $spac = 0) { if(MODULE_NAME=="Home"){ $ispublic=0; $uid=session('uid'); $ispublic+="And bookmarkcategory_staffid = $uid"; }else if(MODULE_NAME=="Admin"){ $ispublic=1; } $Model = new Model(); $spac = $spac + 8; $res=$Model->query( "SELECT * FROM x_bookmarkcategory WHERE bookmarkcategory_pid=$pid And bookmarkcategory_ispublic = $ispublic order by bookmarkcategory_sort"); foreach($res as $key=>$value){ $result[]=$res[$key]; getBookmarkcategory($value['bookmarkcategory_id'],$result,$spac); } return $result; } $list = getBookmarkcategory(); return $list;
Don't say demand, table structure, who knows what a piece of code is used for
PHP Infinite Classification An algorithm can refer to the PHPCMS category table structure. It is to put all the parent (tree) nodes and the sub (tree) nodes are stored recursively into the database. You can memorize all the data to the array and then recursively.
You can refer to the answers to the following questions, "classification" and the Department of Rights Management similar
http://segmentfault.com/q/1010000004365843/a-1020000004365952
$res=$Model->query( "SELECT * FROM x_bookmarkcategory WHERE bookmarkcategory_pid=$pid And bookmarkcategory_ispublic = $ispublic order by bookmarkcategory_sort");
Should be slow here, completely can find a way to do not put into the recursive inside query, first-time query out, and then recursion also faster than this n times ah
function getbookmarkcategory ($pid = 0, & $result = Array (), $spac = 0) {if (module_name== "Home" ) {$ispublic = 0; $uid =session (' uid '); $ispublic + = "and Bookmarkcategory_staffid = $uid"; }else if (module_name== "Admin") {$ispublic = 1; } $Model = new Model ();//Unexpectedly, one of the reasons for recursive each seek is to have the instance model slow to the outside of the function $spac = $spac + 8; $res = $Model->query ("select * from X_bookmarkcategory WHERE bookmarkcategory_pid= $pid and Bookmarkcategory_ispublic = $ispublic ORDER by Bookmarkcategory_sort "); SELECT * This writing performance is low bookmarkcategory_pid= $pid--bookmarkcategory_pid whether to index foreach ($res as $key = = $value) { $result []= $res [$key]; Getbookmarkcategory ($value [' bookmarkcategory_id '], $result, $SPAC); } return $result; }//The best thing is that the data is removed from the outside and then recursively quickly MySQL operation is very slow
Once the query finds all, then loops, uses the value reference to adjust the data structure, and then it comes out.
can use left and right tree
Http://wenku.baidu.com/view/cb2bb3eeaeaad1f346933ffd.html
Very high efficiency
You can do it with a data dictionary, take out all the data at once, and then cycle it once.
Because you are constantly reading data from external storage. If the amount of data is small, you can read all the required data at once and then construct the tree in memory. What is needed data can be saved when the data is generated. If the amount of data is very large, consider storing the associated data at the tree level in several reads.
PS: Look in your code, be careful with SQL injection