【问题标题】:MySQL Join 3 Tables TogetherMySQL 将 3 个表连接在一起
【发布时间】:2013-06-30 04:39:50
【问题描述】:

您好,我有以下表格

用户(id 为主键/自增)

编号 |别名 |姓名 ---------------------------------- 1 |乔 |乔·安德森 2 |TG |特谷宽 3 |彼得 |彼得·尼尔 4 |尼科尔|临床尼科尔

images(id为主键/自增。images.user代表users.id)

编号 |图片 |用户 ---------------------------------- 1 |125.jpg |1 2 |126.jpg |1 3 |127.jpg |2 4 |128.jpg |3

feed(id为主键/自增。feed.user代表users.id)

编号 |标题 |用户 ---------------------------------- 1 |-一些文字a-|1 2 |-一些文本b-|2 3 |-一些文本c-|3 4 |-一些文本d-|3

我想在以下条件下加入这三个表

  1. 输出应包含 users.alias、images.image、feed.title
  2. 四行作为 feed 表有四行(我需要 SELECT FROM feed)。
  3. 仅同一用户的最后一张图片。例如用户 1 的 126.jpg 而不是 125.jpg
  4. feed.id 的降序

输出应该是这样的

别名 |图片 |标题 ---------------------------------- 彼得 |128.jpg |-一些文字 d- 彼得 |128.jpg |-一些文字 c- TG |127.jpg |-一些文字b- 乔|126.jpg |-一些文字a-

请帮我写这个查询。

【问题讨论】:

  • 你自己会尝试吗?公平地说,您的表很简单,因此查询也很简单。任何基本的 JOIN 教程都会为您提供足够的信息来执行此操作。
  • 您能否向我们展示您迄今为止所做的工作,以便我们帮助您纠正您遇到的问题?
  • @Lee 我试过很多次了。我想我对 mysql join 的知识有问题。如果有两张桌子,对我来说很容易。这就是为什么我花了大约 15 分钟来写这篇文章中的所有表格。
  • 问题必须表现出对所解决问题的最低限度的理解。告诉我们您尝试过什么以及为什么没有成功。另见:Stack Overflow question checklist

标签: mysql join


【解决方案1】:

问题在于,除了您显示的顺序之外,图像和提要表都没有很好的“最后”概念。我不明白您如何以一般方式确定对给定用户有效的方法。

您的用户 1 有图像 125.jpg 和 126.jpg。你打算保留这个计划吗?如果插入名为“some-random-image.jpg”的图像会发生什么?相对于你现在有效的两个,它的顺序是什么?

如果图像和标题都有时间戳来指示生效日期,那是一个小问题。如果是这样,您可以根据最近的生效日期选择每一项。

在这种情况下,您可以编写一个带有两个 JOIN 和几个子选择的 SELECT 来选择给定日期的生效日期。

查询看起来像这样:

SELECT U.ID, U.ALIAS, I.IMAGE, F.TITLE
FROM USERS AS U
JOIN IMAGES AS I 
ON U.ID = I.USER
JOIN FEED AS F
ON U.ID = F.USER
GROUP BY U,ID

根据需要添加 WHERE 子句以选择“最新”。

【讨论】:

  • @Mike Brant,我已经完成了。我仍然需要修复用户应该在输出中显示的最后一个图像。这仅显示表中的第一个图像。 SELECT feeds.id, users.alias, images.image FROM feeds INNER JOIN users ON feeds.user=users.id INNER JOIN images ON feeds.user=images.user GROUP BY feeds.id ORDER BY feeds.id DESC
猜你喜欢
  • 2012-11-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多