我有一个作者列表,我希望按照书籍类型显示它,如下所示:
Horror
Stephen King
Author 2
Author 3
...
Comedy
Author 4
Author 5
...
在我的数据库中,我有一个作者表:
t_author
aut_name | aut_genre
Stephen King | 1
...
...
Author 4 | 2
一个类型表:
t_genre
genre_id | genre_name
1 | Horror
2 | Comedy
...
...
我尝试过使用GROUP BY但我找不到如何显示类别的名称并整理我的列表:
SELECT t_author.aut_name, t_author.aut_genre
FROM t_author
LEFT JOIN t_genre ON t_author.aut_genre = t_genre.genre_id
GROUP BY t_genre.aut_genre
那么,使用MySQL和PDO,有没有办法选择和获取所有作者并按类别显示?
我不需要说我不是在寻找代码而只是一条线索,因为我甚至不知道如何描述它。我的意思是,GROUP BY是否使用正确的陈述?
编辑1:
显然,我正在寻找类似的东西:
SELECT t_author.aut_name, t_author.aut_slug, t_genre.genre_name
FROM t_author
LEFT JOIN t_genre ON t_author.genre_id = t_genre.genre_id
但它显示:
Horror
Stephen King
Horror
Author 2
Comedy
Author 4
Horror
Author 3
我完全理解为什么,但我无法找到如下所示:
Horror
Stephen King
Author 2
Author 3
...
Comedy
Author 4
Author 5
...
答案
HtmHell为我提供了一个使用2D数组的好方法。对于我的3D数组,我编辑了他的代码:
foreach($result as $author=> $slug) {
$authorsByGenre[$slug['genre_name']][] = array($slug['aut_name'] => $slug['aut_slug']);
}
return $authorsByGenre;
答案 0 :(得分:0)
OPENQUERY
这将输出作者作为第1列中的author1,author2,author3和genre_name的类型列,以便您可以拆分或分解作者或其他任何
答案 1 :(得分:0)
这样的事情怎么样:
$authorsByGenre = [];
$results = $db->query("
SELECT t_author.aut_name, t_genre.genre_name
FROM t_genre
JOIN t_author
ON t_author.aut_genre = t_genre.genre_id
")->fetchAll();
foreach ($results as $data) {
$authorsByGenre[$data['genre_name']][] = $data['aut_name'];
}
print_r($authorsByGenre);
答案 2 :(得分:0)
与评论中的建议一样,PDO::FETCH_GROUP就是您问题的答案。不知道你为何忽略它
$sql = "SELECT genre_name, aut_name, aut_slug
FROM t_author a LEFT JOIN t_genre g ON a.genre_id = g.genre_id";
$authorsByGenre = $db->query($sql)->fetchAll(PDO::FETCH_GROUP);
print_r($authorsByGenre);