2012-07-09 128 views
0

我開始學習一些PHP/Mysql,我正在努力如何使這個作品。PHP/MySQL排序/排列從表

我有2個表格。一個叫做ALBUM,另一個叫TRACKS 在專輯上,我有我需要的所有專輯信息(標題,發行日期,封面)和曲目我有所有曲目名稱和專輯ID相關。

我可以使SELECT工作正常,並抓住所有的內容,但我怎麼能過濾ALBUM名稱爲例,並顯示該相冊的所有曲目?

現在我有這個

define("MYSQLUSER", "root"); 
define("MYSQLPASS", "root"); 
define("HOSTNAME", "localhost"); 
define("MYSQLDB", "music"); 

$connection = new mysqli(HOSTNAME, MYSQLUSER, MYSQLPASS, MYSQLDB); 

if ($connection->connect_error) { 
    die('Could not connect: ' . $connection->connect_error); 
}else{ 

$query = "SELECT * from album AS a JOIN tracks AS t ON t.album = a.id ORDER BY a.id, t.trackNumber, t.album"; 

$result_obj = ''; 
$result_obj = $connection->query($query); 

while($result = $result_obj->fetch_array(MYSQLI_ASSOC)){ 
    $items[] = $result; 
} 


foreach ($items as $item){ 
    echo "<ul><li>"; 
    echo $item['name']; 
    echo " - " 
    echo $item['file']; 
    echo "</li></ul>"; 
} 

問題是,將輸出所有專輯/歌曲彼此分開。

像這樣:

<ul> 
<li>Album 1 - file 1</li> 
</ul> 

<ul> 
<li>Album 1 - file 2</li> 
</ul> 

<ul> 
<li>Album 2 - file 1</li> 
</ul> 

我怎樣才能讓專輯在相同的UL /李標籤? 我knwo是我的foreach循環。但我能做什麼?

所以會是這樣:

<ul> 
<li>Album 1 - file 1, Album 1 - file 2, Album 1 - file3</li> 
<li>Album 2 - file 1</li> 
</ul> 

感謝

回答

0

你將不得不使用GROUP BY指令。

SELECT * from album AS a JOIN tracks AS t ON t.album = a.id GROUP BY a.id ORDER BY a.id, t.trackNumber, t.album 

您可以對此指令使用其他參數,產生不同的結果,選擇適合您的最合適的一個。

+0

很酷。謝謝。我會檢查/非常感謝你 – 2012-07-09 23:12:52

1

您可以將查詢作爲它,只是提高了循環如下:

echo "<ul>"; 
$first = true; 
$previous_album = ''; 
while($result = $result_obj->fetch_array(MYSQLI_ASSOC)){ 
    if($previous_album!=$result['album']){ 
     $previous_album = $result['album']; 
     if(!$first){ 
      echo "</li>"; 
     }else{ 
      $first = false; 
     } 
     echo "<li>"; 
    }else{ 
     echo ", "; 
    } 
    echo $result['name']; 
    echo " - "; 
    echo $result['file']; 
} 
echo "</li></ul>"; 

另外請注意,我只在一個循環做的一切,現在你正在使用兩個循環(一個檢索數據庫中的行和另一個顯示結果)。我只是在一個循環中做所有事情,這將提高您的應用程序的性能。

讓我知道你是否需要進一步的幫助。 FedeX

+0

很酷。謝謝 – 2012-07-13 02:13:27