Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/251.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何将这些数据分组到一个数组中?_Php_Mysql_Sql_Arrays_Group By - Fatal编程技术网

Php 如何将这些数据分组到一个数组中?

Php 如何将这些数据分组到一个数组中?,php,mysql,sql,arrays,group-by,Php,Mysql,Sql,Arrays,Group By,我的桌子看起来像这样: artist_id | song_id | user_id a1 s1 u1 a1 s2 u1 a2 s9 u1 a3 s15 u2 我希望我的输出看起来像: Array ( [u1] => Array ( [a1] => Array (

我的桌子看起来像这样:

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
           )

   )
)

我应该从哪里开始?

我不确定我的方法是否最有效:

  • 抓取并分组
    用户id
    ,循环浏览它们

  • 对于每个
    用户id
    ,抓取
    艺术家id

  • 对于每个
    artist\u id
    抓取下方的
    song\u id
    s


有办法进行这一查询吗?

据我所知,您需要表中的所有结果,无
计数
,无
总和
,等等

因此,在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);

您可以从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>';
?>