php mysql:如何列出两个带有相关数据的表?

时间:2013-08-31 11:35:52

标签: php mysqli tree

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

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

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

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

table:pro_class

  

cid标题时间

     

1 PEOPLE 2013/8/31

     

4 CAR 2013/8/30

     

7 Music 2014/7/10

table:pro

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;
}

2 个答案:

答案 0 :(得分:0)

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

以下内容将帮助您获得所需的大部分内容 - 您可以自己制作显示部件。

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

答案 1 :(得分: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>";
?>