2010-05-10 63 views
0

我有一个包含用户数据(例如名称,地址等)的表以及另一个包含关于用户的文本段的表。他们分开的原因是因为我们需要记录所有旧的数据。所以如果用户改变他们的段落 - 旧的仍然应该被存储。关于数据的每一位都有一个关于MeID的主键。我想要做的是有一个连接,从其他表中取出他们的名字,地址等和最新的aboutMe数据。MySQL获得最接近NOW()的行

我不确定我如何才能命令连接才能获取有关我的最新数据。

有人可以帮忙吗?

回答

1

如果你有两个表加入,子查询要求与老款的表给刚刚过去的一个,按日期排序(datestamp DESC),并根据您的用户标识进行匹配。最后,外部查询将整个事件限制在有问题的用户(@UserID)中。

SELECT name, address, aboutme 
FROM users 
LEFT JOIN 
    (SELECT aboutme FROM oldertable 
    WHERE aboutMeID = users.id 
    ORDER BY datestamp DESC 
    LIMIT 1) 
WHERE users.id = @UserID; 
+0

我试过这样的查询,但得到错误消息user.id在子查询中是未知的。任何人都知道该怎么做? – Steve06 2011-10-18 12:39:02

+0

将您的参数@UserID替换为users.id。内部查询实际上并不加入用户表。我需要编辑这个答案才是准确的。 – JYelton 2011-10-18 15:57:07

+0

对于只存储特定用户信息的存储例程而言,这是有意义的。出于我的目的,我需要在子查询中处理的用户依赖外部查询中的当前用户(例如,如果我处理多个用户的记录) – Steve06 2011-10-18 16:57:51

2

假设你已经与dateEntered场一列,你可以只说

select col1, col2, col3 from aboutme order by dateEntered desc limit 1 

这会给你这是最新的行。

+0

这是正确的,它已被修改 – Avitus 2010-05-10 17:54:11

0

你应该改变descendently的日期进行排序,并将其限制在一个记录(LIMIT 1)

0

子查询的变体:

select name, 
     address, 
     (select aboutme 
       from ABOUTTABLE 
       where USERDATA.userid = ABBOUTTABLE.userid order by datefield limit 1) 
from USERDATA 
0

这是相当棘手的,很可能是缓慢的,但它是通过依赖子查询完成。

SELECT name, address, aboutme.text as aboutme 
FROM users 
LEFT JOIN aboutme ON aboutMeID = (SELECT aboutMeID FROM aboutme 
            WHERE user_id = users.id 
            ORDER BY datestamp DESC 
            LIMIT 1) 

不知道它是否比@JYelton解决方案更快,这是你必须测试自己。