【问题标题】:Pulling information from two different tables and merging them in a news feed [closed]从两个不同的表中提取信息并将它们合并到新闻提要中[关闭]
【发布时间】:2013-05-17 18:20:11
【问题描述】:

我有两个不同结构的不同表。当用户执行操作 A 时,就该操作将一行插入到表 A 中,与表 B 相同。当用户执行操作 B 时,将一行插入到表 B 中。

现在我有一个新闻提要,我想向其他朋友展示这两个操作。如何使用 MySQL 查询两个不同结构的表,然后使用 PHP 以时间排序的方式构造更新帖子?

就像在 Facebook 中一样,用户更新他的关系状态与他发布并附上照片的帖子不同,但它们都出现在同一个新闻源中,尽管它们的结构和它们携带的数据类型不同。如果有人能对此有所了解并讨论可能的解决方案,我将不胜感激。

【问题讨论】:

  • 在两个表上都使用内连接/左连接? select a.*,b.* from table_a a inner join table_b b on b.user_id = a.user_id ?
  • 我不想加入,但要合并它们,以便按时间排序。
  • 您可以在查询中对它们进行排序。

标签: php mysql sorting feed


【解决方案1】:

一般的方法是这样的:

SELECT
  'A' AS ActionType,
  ActionA_PK AS ActionPK,
  ActionA_Date AS ActionDate,
  <a description of action A> AS ActionDesc
FROM ActionA
UNION SELECT
  'B',
  ActionB_PK,
  ActionB_Date,
  <a description of action B>
FROM ActionB
ORDER BY ActionDate DESC

这会将不同的操作折叠在一起,并按日期对它们进行排序,最新的在前。您可以在前端显示它们,并且因为您有它们的类型(AB)和它们的主键,您可以在它们的链接或按钮或任何被点击时发回处理它们时识别它们。

有一个SQLFiddle example here

另一个SQLFiddle example here 解释了表如何不需要具有相同的结构来使其工作。

【讨论】:

  • Ed,感谢您的解决方案,您能否解释一下它是如何工作的,或者举一个包含数据的示例。我无法完全理解它。我很感激:)
  • 我实际上弄清楚了您要做什么。谢谢:)
  • 嗯——我几乎完成了这个例子,所以无论如何我都会发布the link to the SQLFiddle example :) 如果它对你没有帮助,它可能会帮助任何将来偶然发现这个问题的人。很高兴我的回答对你有用 - 祝你好运!
  • Ed,Union 的唯一问题是两个表的列数应该相同,对吗?如果你有不同列大小的表,你如何解决这样的问题? :(
  • 为了弥补列的不足,我添加了一些填充列作为 temp 和 'empty' 值,以平衡一个表中较少的列数,但我认为这不是一个好主意.
猜你喜欢
  • 2020-12-21
  • 2011-08-28
  • 1970-01-01
  • 2015-03-22
  • 2013-03-21
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多