我有一个简单的树结构输出问题,
一开始我使用两个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;
}
答案 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>";
?>