优化MYSQL + PHP父子输出

时间:2014-01-23 14:15:34

标签: php mysql sorting optimization grouping

我只是想找到一种方法来使服务器资源有效地排序和显示按字母顺序排序的父/子结构。我不是一个专业的程序员,所以我的代码是蹩脚的,但是它有效,也许你可以帮我优化它。

表格是

id,parentid,name。

父母的parentid为0,孩子为id。

任务是显示按字母排序的父母和父母下的所有孩子,也按字母顺序排序。所有项目都应具有名称及其对应的ID。结构是这样的:

AAA
BBB
-> eee of BBB
-> ooo of BBB
-> zzz of BBB
CCC
DDD
-> mmm of DDD
-> nnn of DDD
EEE
FFF
...

这是我的愚蠢代码,然而,它有效。 MySQL按字母顺序排序所有项目,PHP只循环遍历已排序的名称,为每个父项选择和显示子项。 我不喜欢为每个父项运行的额外循环,也许有人可以建议在性能方面更好的方式

$sqlquer="SELECT id, parentid, name FROM mytable ORDER BY name";
    $ath = mysql_query($sqlquer);

  while ($row = mysql_fetch_array($ath)) { 
   if ($row[parentid]==0) $parents[]=$row;
        else $children[]=$row;
 }

foreach($parents as $par)
{
 echo("$par[name]($par[id])<br>");
   foreach($children as $ch)
     { if ($ch[parentid]==$par[id])
                echo("->$ch[name]($ch[id])<br>");
     }
}

1 个答案:

答案 0 :(得分:0)

select 
  if ( b.parentid is null, a.name, concat( '->', a.name, ' of ', b.name ) 
    fieldname
from 
  table a 
left 
  join table b
on 
  a.parentid = b.id
order by 
  if ( b.parentid is null, a.name, b.name ), 
  a.name

很抱歉没有格式和非正式回复,但现在我来自移动设备。希望它有效,我没有经过测试就做到了,因为有任何问题你可以联系我。使用此解决方案,您可以在一个查询中执行所需的操作,并返回已排序的结果。