2012-07-09 86 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