【问题标题】:Fetching records from different tables in the database从数据库中的不同表中获取记录
【发布时间】:2010-12-24 06:09:18
【问题描述】:

我的应用程序有一个类似 facebook 的流,显示各种类型的更新。因此它将显示常规帖子(来自“帖子”表)和事件(来自“事件”表)表等等。

问题是我不知道如何从不同的表中获取这些记录,因为它们有不同的列。我是否应该多次查询数据库,然后用 PHP 组织数据?如果是这样,如何?我不确定我应该如何处理这个问题。

非常感谢您的帮助:)

【问题讨论】:

  • UNION 是您正在寻找的神奇词汇。

标签: php mysql


【解决方案1】:

除非事件和帖子彼此相关,否则您可能会单独查询它们,即使它们显示在同一页面上。

您不会仅仅为了它而使用 JOIN。仅当存在外键关系时。如果你不知道那是什么,那你就没有。

【讨论】:

    【解决方案2】:

    如果数据表彼此相关,您通常可以使用 JOIN 和 UNION 的某种组合在单个查询中获取数据。但是,为了获得更好的答案,您必须发布数据表的结构以及网站所需的(组合)记录样本。

    【讨论】:

      【解决方案3】:

      如果您不知道列,则可以获取表元数据并找出列代表什么以及它们对应的数据类型。
      如果您知道哪些列,您可以从多个表中进行选择,甚至可以使用嵌套选择或连接来获取数据。

      【讨论】:

        【解决方案4】:

        理想情况下,您只需使用JOIN 在一个查询中从多个表中获取数据。但是,如果不了解更多关于表模式的信息,就很难提供任何有用的细节。 (除非您从一开始就考虑到这一点,否则这很可能是不可能的。)

        因此,您可能还想创建一个通用的“元”表,以通用格式为每个帖子/事件提供信息,并提供链接到相关表的方法。 (即:它将包含“父”类型和 ID。)然后,您可以将此元表用作“更新”流的源,并根据需要向下钻取到适当的内容。

        【讨论】:

          【解决方案5】:

          加入 user_id 上的表,即

          Select * from posts p
          left join status_updates su on p.user_id = su.user_id
          limit 25;
          

          或者,如果您的桌子差异太大,请先使用临时桌子

          create table tmp_updates
          (
           select user_id, p.id as update_id, 'post' as update_type, p.text from posts;
          );
          
          insert into table tmp_updates
          (
           select user_id, su.id as update_id, 'status' as update_type, su.text from status_updates;
          );
          
          Select * from tmp_updates
          where user_id = '...'
          limit 25;
          

          【讨论】:

            猜你喜欢
            • 2011-05-29
            • 1970-01-01
            • 2013-01-27
            • 1970-01-01
            • 2012-08-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多