MySQL一起加入3个表

时间:2013-07-02 17:23:18

标签: mysql join

您好我有以下表格

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

    id    |    alias    |    name
----------------------------------
1         |Joe          |Joe Anderson
2         |TG           |Tegu Kuan
3         |Peter        |Peter Neil
4         |Nicol        |Clin Nicol

图像(id是主键/自动增量.images.user表示users.id)

    id    |    image    |    user
----------------------------------
1         |125.jpg      |1
2         |126.jpg      |1
3         |127.jpg      |2
4         |128.jpg      |3

feed(id是主键/自动增量.feed.user表示users.id)

    id    |    title    |    user
----------------------------------
1         |-some text a-|1
2         |-some text b-|2
3         |-some text c-|3
4         |-some text d-|3

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

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

    输出应该是这样的

       alias  |    image    |    title
    ----------------------------------
    Peter     |128.jpg      |-some text d-
    Peter     |128.jpg      |-some text c-
    TG        |127.jpg      |-some text b-
    Joe       |126.jpg      |-some text a-
    

    请帮我写这个查询。

1 个答案:

答案 0 :(得分:0)

问题在于,图像和Feed表都没有超出您显示顺序的“最后”概念。我不知道如何以一般方式决定给定用户使用哪一个。

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

相关问题