0

嗨,我有以下表格

用户(id 是主键/自动增量)

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

图像(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

我想在以下条件下加入这 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-

请帮我写这个查询。

4

1 回答 1

0

问题是图像和提要表都没有很好的“最后”概念,超出了您显示的顺序。我看不出您如何以一般方式确定哪个对给定用户有效。

您的用户 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 子句以选择“最新”。

于 2013-07-02T17:27:04.310 回答