如何合并关联数组的特定部分?

时间:2016-01-26 22:24:55

标签: php mysql arrays mysqli

首先提出问题,稍后解释:

第一个数组的Insteat,我想要一个看起来像secound数组的那个:

echo json_encode($movies);
//WHAT I DO NOT WANT: [{"movie_name":"test1","genre_name":"Action"},{"movie_name":"test2","genre_name":"Drama"},{"movie_name":"test2","genre_name":"Action"}]
//WHAT I WANT: [{"movie_name":"test1","genres":["Action"]},{"movie_name":"test2","genres":["Drama","Action"]}]

因此,对于movie_name具有相同值的几行,但genre_name的值不同,我希望每个影片都有一行,其中所有genre_names都合并为一个gernes数组;

我希望的解决方案: 使用php和mysqli从数据库中获取数据。这是我使用的SQL查询,它生成第一个数组:

SELECT movies.movie_name, genres.genre_name FROM genres
 INNER JOIN genre_movie ON genres.id = genre_movie.genre_id 
 INNER JOIN movies ON movies.id = genre_movie.movie_id;

我对SQL并不擅长,并且认为有一个查询可以让我立即获得数据(我想要的那个)。

到目前为止我的解决方案: 我实际上使用php arglorithm解决了这个问题,但如果有什么比例或我添加新列,它有点复杂和困难:

foreach($myArray as $movie)
{
    foreach($newList as $key => $item)
    {
        if($item['movie_name'] == $movie['movie_name']){
            $exists = true;
            $position = $key;
        }
    }
    if($exists == true)
    {
        $newList[$position]['genres'][] = $movie['genre_name'];
        $exists= false;

    } else {
        $newList[] = array('movie_name' => $movie['movie_name'], 'genres' => array($movie['genre_name']));
    }

}

1 个答案:

答案 0 :(得分:1)

看看group_concat:http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

我没有模仿你的牌桌,但也许这是你的查询:

SELECT movies.movie_name, group_concat(genres.genre_name) FROM genres
INNER JOIN genre_movie ON genres.id = genre_movie.genre_id 
INNER JOIN movies ON movies.id = genre_movie.movie_id
GROUP BY movies.movie_name;

<强>版

嗯,我现在模仿它,是的,这是你的查询。我只想改变:

group_concat(genres.genre_name)

有关:

group_concat(distinct(genres.genre_name))

仅返回不同的值。