首先提出问题,稍后解释:
第一个数组的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']));
}
}
答案 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))
仅返回不同的值。