首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >选择表中行对应的所有数据(SQL)

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

Stack Overflow用户
提问于 2018-08-19 23:42:16
回答 1查看 145关注 0票数 1

编辑:使用MySQL。

在本例中,我有一个Posts表、一个Users表、一个Tagged_Posts表和一个Tags表。

Posts表有一个对应于user_id表和id列的用户外键。

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

Tags表只有一个id和一个slug。

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

一篇文章可以有很多标签。

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

代码语言:javascript
复制
$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次,并且列出了不同的标签值。如下所示:

代码语言:javascript
复制
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
        )

)

我可以做一个简单的查询并获得与帖子相关的所有内容吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-19 23:44:19

您希望将结果连接在一起。例如,在MySQL中,您将执行以下操作:

代码语言:javascript
复制
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;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51919287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档