2015-11-25 117 views
0

我想通過「contactreply」表訂購「contact」表。 「contactreply」表中的「contactid」行是「contact」表中的「ID」行。 「聯繫方式」必須由「contactreply」表中的最後一個插入物訂購,其中「contactid」是表格「contact」中的「ID」。Sql select table by

聯繫表:

+----+--------+----------+----------+ 
| ID | userid | subject | content | 
+----+--------+----------+----------+ 
| 1 |  1 | subject | subject | 
| 2 |  1 | subject2 | subject2 | 
+----+--------+----------+----------+ 

回覆表

+----+--------+-----------+---------+ 
| ID | userid | contactid | content | 
+----+--------+-----------+---------+ 
| 1 |  1 |   1 | reply1 | 
| 2 |  1 |   2 | reply2 | 
| 3 |  1 |   1 | fasd | 
| 4 |  1 |   2 | asdf | 
| 5 |  1 |   2 | f  | 
| 6 |  1 |   1 | asdf | 
+----+--------+-----------+---------+ 

我盡我所能來解釋它,希望你理解它;) 我媒體鏈接看着其他職位,但我不能讓它工作。

預先感謝您。

+2

顯示您的預期產出,到目前爲止你已經嘗試了什麼。 – Amit

+2

你是什麼意思'必須由表中的最後一個插入「contactreply」'命令?合同回覆沒有時間列,唯一能通過「上一次插入」進行排序的方法似乎是按降序排列合同答覆ID ......這是正確的嗎? – medveshonok117

+0

@ medveshonok117假設id是自動遞增的,那麼它具有先天的臨時性 – Strawberry

回答

1
SELECT c.* 
    FROM contacts c 
    JOIN reply x 
    ON x.contactid = c.id 
    JOIN 
    (SELECT MAX(id) max_id FROM reply GROUP BY contactid) y 
    ON y.max_id = x.id 
ORDER 
    BY x.id; 
+----+--------+----------+----------+ 
| ID | userid | subject | content | 
+----+--------+----------+----------+ 
| 2 |  1 | subject2 | subject2 | 
| 1 |  1 | subject | subject | 
+----+--------+----------+----------+ 
1

檢查,如果這是你所期望的

select a.*, b.id from contact as a 
     inner join 
(select * from contactReply as x 
where x.id = 
      (select max(id) from contactReply as y 
      where x.contactid = y.contactid) 
) as b 
on a.ID = b.contactId 
order by b.id 
+0

請注意,不相關的子查詢通常更快。 – Strawberry