2010-05-10 81 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解決方案更快,這是你必須測試自己。