0

我有这些表:

用户,一个表包含用户:

+--------------------------
| ID    |     Name        |
+--------------------------

Dogs,一个包含狗的表(Last change 是一个时间戳,告诉该狗状态上次更改的时间):

+---------------------------------------------------------
| ID    |       Name       |        Last_Changed_At      |
+---------------------------------------------------------

Users_Dogs_Relations , 描述哪只狗属于哪个用户的表,其中多只狗可以属于一个用户,多个用户可以拥有同一只狗,多只狗可以属于多个用户。(简而言之,任何用户都可以与任何狗相关联):

+------------------------------------
|   UserID        |     DogID       |
+------------------------------------

Users_Friend_Relation,一张表,描述了哪个用户是哪个用户的朋友:

+------------------------------------
|   UserID1     |       UserID2     |
+------------------------------------

我想做的是告诉史蒂夫(其中一位用户),他的朋友拥有的所有狗的名字(由给定时间戳的 Last_Changed_At 排序)。

例如,给定时间 11:23:00 的 Steve,将查询 Steve 朋友的所有狗,按时间戳排序,并且仅在 11:23:00 以下。哦,我不希望狗出现两次。任何人都可以给我一些线索?

4

1 回答 1

1

您必须将所有表格加入正确的列

  • UsersUsers_Friend_Relation结交史蒂夫的朋友
  • Users_Dogs_RelationsUsers_Friend_Relation得到*史蒂夫*的朋友的狗
  • Dogs得到Users_Dogs_Relations这些狗的名字

并指定您的where条件。

SELECT DISTINCT d.Name
FROM Users u1
JOIN Users_Friend_Relation f ON u1.ID = f.User1ID
JOIN Users_Dogs_Relations udr ON udr.UserID = f.User2ID
JOIN Dogs d ON udr.DogID = d.ID
WHERE u1.Name = Steve
AND d.Last_Changed_At < '11:23:00'
于 2013-04-07T14:24:48.317 回答