-4

我有一个简单的树结构输出问题,

一开始我用了两个mysql_query,一个是获取pro_class的数据,包括pro_class.cid,通过cid查询下一张表,比如:

mysql_query("select * from pro_class ");
mysql_query("select * from pro where cid='pro_class.cid' ");

但我想使用一个查询,我该如何完成?

表:pro_class

cid 标题时间

1 人 2013/8/31

4 车 2013/8/30

7 音乐 2014/7/10

表:亲

id  cid  title  content  time
1   1  Mark     xxxx      2010/8/31
2   4  BMW      xxxx      2012/2/12
3   1  Joe      xxxx      2015/1/31
4   7  sweet    xxxx      2013/8/22
5   1  KEN      xxxx      2010/1/31

结构应该是

PEOPLE
-Mark
-Joe
-KEN
CAR
-BMW
Music
-sweet

我希望 Html 输出可以这样(通过 php+mysql)

<ul>
 <li class=""><a href="#">PEOPLE</a></li>
 <ul class="sub">
   <li><a title='Mark' href='?id=1'>Mark</a></li>
   <li><a title='Joe' href='?id=3'>Joe</a></li>
   <li><a title='KEN' href='?id=5'>KEN</a></li>
 </ul>
 <li class=""><a href="#">CAR</a></li>
 <ul class="sub">
   <li><a title='BMW' href='?id=2'>BMW</a></li>
 </ul>
 <li class=""><a href="#">Music</a></li>
 <ul class="sub">
   <li><a title='sweet' href='?id=4'>sweet</a></li>
 </ul>
</ul>

How do I to coding sql?


$rst = mysql_query("select ?????? ");
while($row = mysql_fetch_object($rst)){ 

echo <<<EOD
<ul>
 <li class=""><a href="#">{$row->pro_class.title}</a></li>
 <ul class="sub">
   <li><a title='{$row->pro.title}' href='?id={$row->pro.id}'>{$row->pro.title}</a></li>
 </ul>
</ul>


EOD;
}
4

2 回答 2

0

您可以使用一个名为 mysql 的函数group_concat,它将许多行合并为一个由您选择的内容分隔的字符串。

以下将为您提供获得所需内容的大部分方法 - 不过您可能可以自己解决显示部分。

select
    pro_class.title,
    GROUP_CONCAT(pro.title SEPARATOR ',') AS listItems
from
    pro_class
        left outer join pro
            on pro_class.cid=pro.cid
group by
    pro_class.title
于 2013-08-31T11:51:40.293 回答
0

你可以试试这个方法。它使用 group_concat。

<?php
$query = "select pc.title as title, group_concat(p.title) as inner_titles FROM pro_class pc  LEFT JOIN pro p ON p.cid=pc.cid GROUP BY p.cid ORDER BY p.title";
$result=mysqli_query($query);
print "<ul>";
while($res=mysqli_fetch_array($result)) {
    print "<li>" . $res['title'] . "</li>";
    $arr = explode(",",$res['inner_titles']);
    if(count($arr)>0) {
        print "<ul>";
        foreach($arr as $val) {
            print "<li>" . $val . "</li>";
        }
        print "</ul>";
    }
}
print "</ul>";
?>
于 2013-08-31T11:56:44.053 回答