选择与表中的行相对应的所有数据(SQL)

时间:2018-08-19 15:42:16

标签: mysql sql

编辑:使用MySQL。

在此示例中,我有一个Posts表,一个Users表,一个Tagged_Posts表和一个Tags表。

“帖子”表的user_id外键与“用户”表和id列相对应。

Tagged_posts表具有两个外键,一个用于tag_id,一个用于post_id

“标签”表只有一个ID和一个标签。

我正在尝试查询帖子,并返回与该帖子相关的所有数据,即帖子数据,该帖子的用户数据以及该帖子属于哪些标签。

单个帖子可以包含多个标签。

这是我正在使用的SQL查询:

$sql = "SELECT posts.title, users.name, users.handle, users.email, tags.slug as tags
from posts 
INNER JOIN users ON posts.user_id = users.id
INNER JOIN tagged_posts ON posts.id = tagged_posts.post_id
INNER JOIN tags ON tagged_posts.tag_id = tags.id";

由于此特定帖子具有3个与之关联的标签,因此该查询会返回同一帖子3次,并为标签列出不同的值。见下文:

Array
(
    [0] => Array
        (
            [title] => This is my first Post!
            [name] => exampleuser
            [handle] => example
            [email] => example@gmail.com
            [tags] => database-design
        )

    [1] => Array
        (
            [title] => This is my first Post!
            [name] => exampleuser
            [handle] => example
            [email] => example@gmail.com
            [tags] => sql
        )

    [2] => Array
        (
            [title] => This is my first Post!
            [name] => exampleuser
            [handle] => example
            [email] => example@gmail.com
            [tags] => php
        )

)

我可以进行单个查询并获得与帖子相关的所有信息吗?

1 个答案:

答案 0 :(得分:2)

您想将结果串联在一起。例如,在MySQL中,您可以这样做:

select p.title, u.name, u.handle, u.email, group_concat(t.slug) as tags
from posts p join
     users u 
     on p.user_id = u.id join
     tagged_posts tp
     on p.id = tp.post_id join
     tags t
     on tp.tag_id = t.id
group by p.title, u.name, u.handle, u.email;