SQL显示和获取GROUP BY类别

时间:2016-08-23 21:12:37

标签: php mysql pdo

我有一个作者列表,我希望按照书籍类型显示它,如下所示:

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;

3 个答案:

答案 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);