2013-02-06 68 views
2

我的表看起來像這樣:如何將這些數據分組到一個數組中?

artist_id | song_id | user_id 
a1   s1  u1 
a1   s2  u1 
a2   s9  u1 
a3   s15  u2 

我想我的輸出看起來像:

Array 
    (
    [u1] => Array 
     (
     [a1] => Array 
      (
       [0] => s1 
       [1] => s2 
      ) 
     [a2] => Array 
      (
       [0] => s9 
      ) 
    ) 
    [u2] => Array 
     (
     [a3] => Array 
      (
       [0] => s15 
      ) 

    ) 

應該在哪裏開始呢?

我不知道我的做法是最有效的:

  • 抓鬥和組user_id,環通他們。

  • 對於每個user_id,抓住artist_id

  • 對於每個artist_id抓住下面的song_id s。

有沒有辦法讓這一個查詢?

+0

你的數據庫是如何設置的?你有一張用戶表和歌曲或藝術家表的外鍵嗎?你有映射表嗎? – Tyanna

+0

是的,所以每列都有它自己的表格。本質上,我試圖抓住用戶和他們所附的藝術家,然後列出該藝術家下的所有歌曲。 – Mike

回答

7

您可以從MySQL查詢中獲得以下結果集。使用庫PDO或MySQLi中的任何一個。

<?php 
$results = array(
       0 => array('artist_id' => 'a1', 'song_id' => 's1', 'user_id' => 'u1'), 
       1 => array('artist_id' => 'a1', 'song_id' => 's2', 'user_id' => 'u1'), 
       2 => array('artist_id' => 'a2', 'song_id' => 's9', 'user_id' => 'u1'), 
       3 => array('artist_id' => 'a3', 'song_id' => 's15', 'user_id' => 'u2') 
      ); 
echo '<pre>';print_r($results);echo '</pre>'; 
?> 

這種嘗試,

<?php 
$new_array = array(); 

foreach($results as $keys=>$values) { 
    $new_array[$values['user_id']][$values['artist_id']][] = $values['song_id']; 
} 
echo '<pre>';print_r($new_array);echo '</pre>'; 
?> 

注: 您無法從單個查詢得到它,它是依賴於結果集。我解釋了你的結果集, enter image description here

+0

偉大的方法,謝謝! – Mike

0

只要我看到,你需要的所有結果在你的餐桌,沒有count,沒有sum

因此,有什麼可以group by在SQL查詢,只要選擇大家都出去了,並將它們在PHP組:

$result=array(); 
$mysqli_result=$mysqli->query("SELECT `artist_id`,`song_id`,`user_id` FROM `songs`"); 
while($row=$mysqli_result->fetch_assoc()) 
{ 
    if(empty($result[$row["user_id"]])) 
     $result[$row["user_id"]]=array(); 
    if(empty($result[$row["user_id"]][$row["artist_id"]])) 
     $result[$row["user_id"]][$row["artist_id"]]=array(); 
    $result[$row["user_id"]][$row["artist_id"]][]=$row["song_id"]; 
} 
print_r($result); 
相關問題