2011-02-03 52 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的时候更是如此。

祝你好运