2013-08-31 33 views
-4

我做了一個簡單的樹形結構的輸出問題,php mysql:如何用相關數據列出兩個表?

一開始我用兩個的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標題時間

3人2013年8月31日

4 CAR二零一三年八月三十零日

7音樂2014年7月10日

表: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

所以你到現在爲止嘗試過什麼? – Dhaval

+0

是的!在開始我使用兩個mysql_query,一個是獲取pro_class數據,包括pro_class.cid,並通過它來查詢下一個表,mysql_query(「select * from pro where cid ='pro_class.cid'」); – ss123

+0

甚至不要考慮使用mysql_ *接口。切換到mysqli或PDO。 mysql_ *已被棄用,並在最新的PHP版本中出現。 –

回答

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 
+0

謝謝,但是如果表:pro_class hava data,但是table:pro沒有,那麼它不能顯示pro_class.title – ss123

+0

@ ss123我把連接改成了外連接,這樣可以解決你關於第二個表爲空的問題。你也會很好地閱讀這篇文章,我把它放在一起:http://stackoverflow.com/questions/12475850/how-can-an-sql-query-return-data-from-multiple-tables – Fluffeh

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>"; 
?> 
+0

謝謝,但如果表:pro_class hava數據,但表:pro沒有,那麼它不能顯示pro_class.title ... – ss123

+0

@ ss123你可以使用左連接來擺脫這個問題。即使沒有匹配的行,pro_class表中的每行都會返回至少一行 – rakeshjain

+0

@ ss123您是否無法通過我的答案和上述評論解決您的問題? – rakeshjain

相關問題