gpt4 book ai didi

php - 加入后分组结果?

转载 作者:行者123 更新时间:2023-11-30 23:30:01 26 4
gpt4 key购买 nike

所以,我有三个表。 电影movies_genres流派。我想通过它的 Id 获取一部电影,并在结果中加入它的流派。我设法加入了结果,但它没有按我想要的方式显示。我不确定我问的是否可行。

这是我的查询:

SELECT `movies`.*, GROUP_CONCAT(genres.id) AS genre_id, GROUP_CONCAT(genres.name) AS genre_name
FROM (`movies`)
INNER JOIN `movies_genres`
ON `movies_genres`.`movie_id` = `movies`.`id`
INNER JOIN `genres`
ON `genres`.`id` = `movies_genres`.`genre_id` WHERE `movies`.`id` = 19908
GROUP BY `movies`.`id`

查询由 Codeigniters Active Record 类生成,如果有帮助,这里是 Codeigniter 代码:

$this->db->select('movies.*, GROUP_CONCAT(genres.id) AS genre_id, GROUP_CONCAT(genres.name) AS genre_name');
$this->db->from('movies');
$this->db->where('movies.id', $movie_id);
$this->db->join('movies_genres', 'movies_genres.movie_id = movies.id', 'inner');
$this->db->join('genres', 'genres.id = movies_genres.genre_id', 'inner');
$this->db->group_by('movies.id');

这是我目前得到的结果:

Array
(
[id] => 19908
[movie_title] => Zombieland
[overview] => An easily spooked guy...
[genre_id] => 28,12,35,27
[genre_name] => Action,Adventure,Comedy,Horror
)

这就是我想要的:

Array
(
[id] => 19908
[movie_title] => Zombieland
[overview] => An easily spooked guy...
[genres] => array(
0 => array(
'id' => 28,
'name' => Action
),
1 => array(
'id' => 12,
'name' => Adventure
),
1 => array(
'id' => 35,
'name' => Comedy
),
1 => array(
'id' => 27,
'name' => Horror
)
)
)

这是否可能,如果可能,如何实现?

最佳答案

您列出的查询将有 n 行(其中 n = 电影数),而您似乎想要的查询将有更多行(电影类型的条目数) ).您最好保留该查询,并进行一些后期处理。

考虑:

在你得到它之后,只需通过类似的方式运行你的结果(例如 $result)数组:

foreach($result as &$row)
{
// Split over commas
$gi_elements = explode(',', $row['genre_id']);
$gn_elements = explode(',', $row['genre_name']);

// Build genre
$row['genre'] = array();
for($i=0; $i<count($gi_elements); $i++)
{
$row['genre'][] = array('id' => $gi_elements[$i], 'name' => $gn_elements[$i]);
}

// Cleanup
unset($row['genre_id']);
unset($row['genre_name']);
}

之后,$results 将完全按照您的意愿显示,无需额外的数据库工作。

编辑: 修正了一些拼写错误。

关于php - 加入后分组结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11209264/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com