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ある s をつかみます。song_id

この1つのクエリを作成する方法はありますか?

4

2 に答える 2

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>';
?>

注: 単一のクエリから取得することはできません。結果セットに依存します。私はあなたの結果セットで説明しました、 ここに画像の説明を入力

于 2013-02-06T04:57:33.873 に答える
0

私が見る限り、あなたはあなたのテーブルにすべての結果が必要です、いいえcount、いいえsumなど。

したがって、SQLクエリでできることは何もありません。group byそれらをすべて選択し、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);
于 2013-02-06T04:52:18.323 に答える