【问题标题】:Select all data corresponding to row in table (SQL)选择表中行对应的所有数据(SQL)
【发布时间】:2019-01-25 21:46:12
【问题描述】:

编辑:使用 MySQL。

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

Posts 表有一个外键 user_id 对应于 Users 表和 id 列。

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

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

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

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

这是我正在使用的 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
        )

)

我是否能够进行一次查询并获得与帖子相关的所有内容?

【问题讨论】:

  • 你用的是什么数据库?
  • MySQL。我会把它添加到我的问题中,谢谢

标签: mysql sql


【解决方案1】:

您想将结果连接在一起。例如,在 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;

【讨论】:

  • 实际上,我刚刚遇到了 group_concat 的问题。如果我有多个帖子,它只会显示 1 个帖子并将所有标签添加在一起,即使它们不属于该 post_id。你想让我编辑我的问题吗?
  • 哦,你是对的......我不确定第一次发生了什么。它确实按预期工作。再次感谢
  • 嘿,如果你有空,还有一个与此相关的问题:stackoverflow.com/questions/52139458/…
猜你喜欢
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
相关资源
最近更新 更多