【问题标题】:Select multiple data from two tables in one query在一个查询中从两个表中选择多个数据
【发布时间】:2015-04-11 07:47:40
【问题描述】:

我有两个表:posts 和 cmets。帖子中的标识符列是post_id。每条评论还有post_id指向回复的帖子。

posts             comments
- post_id         - comment_id
- message         - message
- time            - time
                  - post_id

我需要什么:选择帖子,以及每个选定帖子上发布的 cmets。

我现在做什么:我有两个问题。

  1. 首先查询选择帖子,然后循环遍历它,将所有post_ids 保存到一个数组中。
  2. 然后第二个查询根据上一步中保存的post_ids 选择所有 cmets。
  3. 然后我循环 cmets 并将它们添加到 posts 变量中。

我想做什么但不知道如何:在一个查询中获取帖子和 cmets。

【问题讨论】:

    标签: mysql


    【解决方案1】:

    试试 -

    select * from posts join comments on posts.post_id = comments.post_id
    

    希望能成功。

    【讨论】:

    • 这个问题是它只获取一条评论。我需要每个帖子的所有 cmets。
    • 如果你的说法是真的,那只意味着你的数据完整性被破坏了。在 comments 表中,对于属于同一职位的 cmets,您应该拥有具有唯一 comment_id 和相同 post_id 的所有 cmets。如果@sgt 的查询不起作用,要么表数据错误,要么(?!)您没有获取查询的所有行(?!)
    • 每条评论我都有唯一的comment_id,每条评论都有post_id到正确的回复帖子。 @sgt 的查询有效,但只获取一条评论。
    【解决方案2】:

    您可以使用join 概念。如需更多信息,请参阅http://www.sitepoint.com/understanding-sql-joins-mysql-database

    【讨论】:

    • 加入,至少以我知道使用它的方式(如@sgt 的示例中),每个帖子只返回一条评论。虽然每个帖子可能有多个 cmets。
    • 您能否使用 SQL 上的示例数据更新您的帖子?
    • 没什么可展示的。想想最简单的情况:posts 1 行,cmets 3 行(都是同一个 post)。我想在一个查询中选择所有这些数据。当我使用 join 时,它实际上是连接来自 cmets 的数据,但仅来自一条评论。
    【解决方案3】:

    使用join 子句:

    SELECT * 
      FROM posts AS p, 
           comments AS c
     INNER JOIN posts ON p.post_id = c.post_id;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 2018-01-14
      • 1970-01-01
      • 2013-11-15
      • 1970-01-01
      • 2011-07-09
      相关资源
      最近更新 更多