2012-07-09 3 views
0

일부 PHP/MySQL을 배우기 시작했는데 나는이 작업을 어떻게 할 수 있습니까?테이블에서 PHP/MySQL 정렬/정렬

2 개의 테이블이 있습니다. 하나는 앨범과 다른 앨범으로 불려졌습니다. 앨범에는 내가 필요한 모든 앨범 정보 (제목, 발매일, 커버)가 있으며, 트랙에는 모든 트랙 이름과 앨범 ID가 있습니다.

SELECT가 잘 작동하고 모든 콘텐츠를 가져올 수 있지만 어떻게 앨범 이름으로 필터링하고 해당 앨범과 관련된 모든 트랙을 표시 할 수 있습니까?

는 지금은이

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/리튬 태그에 앨범을 만들 수 있습니다 : 이것처럼

? 나는 내 foreach 루프입니다. 하지만 내가 뭘 할 수 있니?

그래서 다음과 같이 될 것입니다 :

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

감사

답변

0

당신은 지침에서 그룹을 사용해야합니다.

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 

당신은 다른 결과를 생산,이 지침에 다른 매개 변수를 사용할 수 있습니다 당신을 위해 하나에게 맞는 최선을 선택합니다. 에 (하나를

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

는 또한 지금 당신이 두 개의 루프를 사용하고, 난 그냥 하나 개의 루프에 최선을 다하고있어주의 :

+0

차갑다. 감사. 나는/너를 그렇게 많이 체크 할 것이다. –

1

당신은 그대로 쿼리를 떠나 단지 다음과 같은 루프를 향상시킬 수 있습니다 DB에서 행을 검색하고 다른 행에서 결과를 표시). 나는 한 번의 루프만으로 모든 것을 다하고있어 앱의 성능을 향상시킬 것입니다.

추가 도움이 필요하면 알려주세요. FedeX

+0

차갑다. 고맙습니다 –

관련 문제