php - 从多个表中检索数据并将它们列在列表中

标签 php mysql

我在从两个表中检索数据然后列出它们时遇到了一些问题。我想将用户的提要帖子和他们喜欢的事件全部列在一个列表中。

  • 供稿 - 用户帖子表
  • Likes - 用户喜欢的表(因此,当用户喜欢帖子时,记录会添加到喜欢中(表 likes 包含 data,其中包含 feeds ID 喜欢的帖子)

我正在尝试做的事情:在事件墙中列出提要和用户的“喜欢”事件。

所以它应该像这样输出(按时间戳 desc 排序):

  • “这是用户 A 的帖子”
  • 显示用户 C 喜欢用户 B 的帖子
  • “这是用户 B 的帖子”
  • “这是用户 L 的帖子”
  • 显示用户 A 喜欢用户 F 的帖子
  • “这是用户 F 的帖子”
  • -继续-

我当前的 SQL:

SELECT * FROM feeds,likes WHERE feeds.deleted!=0 or likes.deleted!=0 ORDER BY feeds.timestamp, likes.timestamp

但是,我的问题是我不知道如何链接这两个表,因为我的“提要”中的 ID 与“喜欢”中的 ID 不同

最佳答案

要合并这两个集合,您可以使用 UNION ALL 集合运算符。

像这样:

SELECT f.timestamp    AS `timestamp`
     , 'feed'         AS `src`
     , f.feed_id      AS `id`
     , f.feed_content AS `content`
  FROM feeds f
 WHERE f.deleted!=0
 UNION ALL
SELECT l.timestamp    AS `timestamp`
     , 'like'         AS `src`
     , l.like_id      AS `id`
     , l.note         AS `content`
  FROM likes l
 WHERE l.deleted!=0
 ORDER BY 1 DESC

请注意查询(在 UNION ALL 运算符的任一侧)需要根据返回的列数和每列的数据类型进行匹配。

为了适应差异,例如从一个表返回额外的列,而不是从另一个表返回,您可以添加文字表达式来代替“缺失”的列。

额外的 src 列的返回是我们可以用来区分一行是由哪个查询返回的一种方式。返回这样的列不是强制性的,但我经常发现它很有用。 (src 列可以从每个查询中删除,如果它对您的用例没有用的话。)

请注意,也可以通过这种方式组合来自两个以上查询的结果,我们只需添加另一个 UNION ALL 和另一个查询。

组合结果集中的列名由第一个查询确定。第二个查询中的列名和别名将被忽略。

ORDER BY 应用于整个集合,并在最后一个选择之后。

关于php - 从多个表中检索数据并将它们列在列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24582982/

相关文章:

PHP 检测源图像 url 链接是否指向 "broken"图像?

php - 具有 WooCommerce 身份验证的 WordPress 自定义 API

php exec 没有按预期工作

Mysql SELECT 在时间限制内只返回列匹配的最近和下一个最近的行

mysql - 可以使用 SQL 查询获取 "friendly"URL 吗?

php - 谷歌分析替代品?

php - 如何在 Termux 上保持 24/7 全天候运行 python 脚本?

php - fopen() 无法打开流 : permission denied, 但权限应该有效

mysql - 如何删除复合主键

php - Laravel 在点击路线时创建数据库输入?