2011-02-03 53 views
0

我正在一個web應用程序,我有一個數據庫與兩個表。其中一個被稱爲實體,另一個是活動。這是活動表中有許多實體的一對多關係。活動表有一個與它相關的日期,我想根據某些實體ID拉取結果,但我只想拉取最近的活動(按其日期)。所以基本上,我只希望每個實體都有一個回報。必須有一種方法可以在不使用php解析數據的情況下執行此操作。我想盡可能快地製作應用程序。任何幫助將不勝感激。拉最新的結果從一對多加入到mysql

回答

1

在字段名猜測...

SELECT 
e.*, a.* 
FROM 

(SELECT 
    MAX(ActivityID) ActivityID, 
    EntityID 
FROM 
    Activity 
GROUP By 
    EntityID) maxActivity 

INNER JOIN Activity a 
ON maxActivity.ActivityID = a.ActivityID 
INNER JOIN Entity e 
ON e.EntityID = a.EntityID 

或者,如果ID並不總是(假定兩種活動不能共享同一日期)最新的,你真的想日期

SELECT 
    e.*, a.* 
    FROM 
(SELECT 
     MAX(Date) Date, 
     EntityID 
    FROM 
     Activity 
    GROUP By 
     EntityID) maxActivity 

    INNER JOIN Activity a 
    ON maxActivity.Date = a.Date 
     and maxActivity.EntityID = a.EntityID 
    INNER JOIN Entity e 
    ON e.EntityID = a.EntityID 
+0

日期不是唯一的,但第一個幫助。所以我只需從括號中的select中獲取最大ID並基於該ID進行連接。我不知道你可以嵌套選擇語句。有沒有人知道我在哪裏可以找到更多像這樣的advnaced查詢的例子? – Dom 2011-02-03 17:15:47

+0

@Dom你可以嘗試http://stackoverflow.com/tags/sql/hot – 2011-02-03 17:18:44

0

我會說,通過PK/FK關係創建一個鏈接表。

那麼舉個例子: [entities table] ------ [ent_activities] --- [activities],尤其是因爲這兩個數據是如此交織在一起的。

1:M是一個可怕的數據完整性問題,甚至當你有10個,甚至數百個1:M的時候更是如此。

祝你好運